]> Sergey Matveev's repositories - nnn.git/commitdiff
List alphabetically, case ignored (like 'ls -l').
authorArun Prakash Jana <engineerarun@gmail.com>
Sun, 21 Aug 2016 12:47:34 +0000 (18:17 +0530)
committerArun Prakash Jana <engineerarun@gmail.com>
Sun, 21 Aug 2016 12:47:34 +0000 (18:17 +0530)
noice.c

diff --git a/noice.c b/noice.c
index 03b159c7a2c0f258cf812ab76d390e452a12b963..0e3eca7cd393e381208d829295596af24230ac63 100644 (file)
--- a/noice.c
+++ b/noice.c
@@ -38,6 +38,8 @@
 #define MIN(x, y) ((x) < (y) ? (x) : (y))
 #define ISODD(x) ((x) & 1)
 #define CONTROL(c) ((c) ^ 0x40)
+#define TOUPPER(ch) \
+       (((ch) >= 'a' && (ch) <= 'z') ? ((ch) - 'a' + 'A') : (ch))
 #define MAX_LEN 1024
 
 struct assoc {
@@ -203,6 +205,19 @@ xgetenv(char *name, char *fallback)
        return value && value[0] ? value : fallback;
 }
 
+int
+xstricmp(const char *s1, const char *s2)
+{
+       while (*s2 != 0 && TOUPPER(*s1) == TOUPPER(*s2))
+               s1++, s2++;
+
+       /* In case of alphabetically same names, make sure
+          lower case one comes before upper case one */
+       if (!*s1 && !*s2)
+               return 1;
+       return (int) (TOUPPER(*s1) - TOUPPER(*s2));
+}
+
 char *
 openwith(char *file)
 {
@@ -254,7 +269,7 @@ entrycmp(const void *va, const void *vb)
 
        if (mtimeorder)
                return b->t - a->t;
-       return strcmp(a->name, b->name);
+       return xstricmp(a->name, b->name);
 }
 
 void