about summary refs log tree commit diff
path: root/lr.c
diff options
context:
space:
mode:
authorChristian Neukirchen <chneukirchen@gmail.com>2015-10-26 14:40:49 +0100
committerChristian Neukirchen <chneukirchen@gmail.com>2015-10-26 14:40:49 +0100
commitc500373deff3f2bf94bf30a720bc52b569743d68 (patch)
treef297ee483533f5fd416fe5b45ec0df3a9dc8b543 /lr.c
parent929fb5bd5b5ecebb6a3619cb4fa8446a3dd14275 (diff)
downloadlr-c500373deff3f2bf94bf30a720bc52b569743d68.tar.gz
lr-c500373deff3f2bf94bf30a720bc52b569743d68.tar.xz
lr-c500373deff3f2bf94bf30a720bc52b569743d68.zip
sort by extension
Diffstat (limited to 'lr.c')
-rw-r--r--lr.c12
1 files changed, 12 insertions, 0 deletions
diff --git a/lr.c b/lr.c
index e1a13df..30be4d4 100644
--- a/lr.c
+++ b/lr.c
@@ -533,6 +533,16 @@ basenam(const char *s)
 }
 
 static const char *
+extnam(const char *s)
+{
+	char *r = strrchr(s, '/');
+	char *e = strrchr(s, '.');
+	if (!r || r < e)
+		return e ? e + 1 : "";
+	return "";
+}
+
+static const char *
 readlin(const char *p, const char *alt)
 {
 	static char b[PATH_MAX];
@@ -740,6 +750,8 @@ order(const void *a, const void *b)
 		              "ZZZZAZZZZZZZZZZZ"[(fa->sb.st_mode >> 12) & 0x0f]);
 		case 'n': STRCMP(fa->fpath, fb->fpath);
 		case 'N': STRCMP(fb->fpath, fa->fpath);
+		case 'e': STRCMP(extnam(fa->fpath), extnam(fb->fpath));
+		case 'E': STRCMP(extnam(fb->fpath), extnam(fa->fpath));
 		default: STRCMP(fa->fpath, fb->fpath);
 		}
 	}