aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorGravatar Arun Prakash Jana <engineerarun@gmail.com>2016-08-21 18:17:34 +0530
committerGravatar Arun Prakash Jana <engineerarun@gmail.com>2016-08-21 18:17:34 +0530
commit0b5cdd468b8147075cae30219a39f1af73c84fb9 (patch)
treeabb383eefa9302dde927c0bf1794af200d5f262c
parent3701b5bd5ddd38742ca73ca8429eff0d579186b9 (diff)
downloadnnn-0b5cdd468b8147075cae30219a39f1af73c84fb9.tar.gz
List alphabetically, case ignored (like 'ls -l').
-rw-r--r--noice.c17
1 files changed, 16 insertions, 1 deletions
diff --git a/noice.c b/noice.c
index 03b159c..0e3eca7 100644
--- 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