Browse Source

Consider only symbolic or only nunmeric names

master
Arun Prakash Jana 6 years ago
parent
commit
04bf7537e5
No known key found for this signature in database GPG Key ID: A75979F35C080412
1 changed files with 36 additions and 11 deletions
  1. +36
    -11
      nnn.c

+ 36
- 11
nnn.c View File

@@ -645,28 +645,45 @@ xstricmp(char *s1, char *s2)
{ {
static char *str1, *str2, *c1, *c2; static char *str1, *str2, *c1, *c2;
static int diff, nsyms1, nsyms2; static int diff, nsyms1, nsyms2;
static bool symbolic1, symbolic2, numeric1, numeric2;

symbolic1 = symbolic2 = numeric1 = numeric2 = FALSE;


str1 = c1 = s1; str1 = c1 = s1;
nsyms1 = 0; nsyms1 = 0;
while (isspace(*c1) || ispunct(*c1)) /* Same weight to spaces and punctuations */
while (isspace(*c1) || ispunct(*c1)) { /* Same weight to spaces and punctuations */
++nsyms1, ++c1; ++nsyms1, ++c1;
if (*c1 == '-' || *c1 == '+')
++c1;
while (*c1 >= '0' && *c1 <= '9')
++c1;
if (!symbolic1)
symbolic1 = TRUE;
}


str2 = c2 = s2; str2 = c2 = s2;
nsyms2 = 0; nsyms2 = 0;
while (isspace(*c2) || ispunct(*c2))
while (isspace(*c2) || ispunct(*c2)) {
++nsyms2, ++c2; ++nsyms2, ++c2;
if (!symbolic2)
symbolic2 = TRUE;
}

if (!*c1 && *c2) {
if (symbolic1)
return -1;
} else if (*c1 && !*c2) {
if (symbolic2)
return 1;
}

if (*c1 == '-' || *c1 == '+')
++c1;
if (*c1 >= '0' && *c1 <= '9')
numeric1 = TRUE;

if (*c2 == '-' || *c2 == '+') if (*c2 == '-' || *c2 == '+')
++c2; ++c2;
while (*c2 >= '0' && *c2 <= '9')
++c2;
if (*c2 >= '0' && *c2 <= '9')
numeric2 = TRUE;


if (*c1 && *c2)
s1 = c1, s2 = c2;
else if (*c1 == '\0' && *c2 == '\0') {
if (numeric1 && numeric2) {
static long long num1, num2; static long long num1, num2;


num1 = strtoll(s1, NULL, 10); num1 = strtoll(s1, NULL, 10);
@@ -677,10 +694,18 @@ xstricmp(char *s1, char *s2)
else else
return -1; return -1;
} }
} else if (numeric1)
return -1;
else if (numeric2)
return 1;

#if 0
} else if (*c1 == '\0' && *c2 != '\0') } else if (*c1 == '\0' && *c2 != '\0')
return -1; return -1;
else if (*c1 != '\0' && *c2 == '\0') else if (*c1 != '\0' && *c2 == '\0')
return 1; return 1;
#endif
s1 = c1, s2 = c2;


while (*s2 && *s1 && TOUPPER(*s1) == TOUPPER(*s2)) while (*s2 && *s1 && TOUPPER(*s1) == TOUPPER(*s2))
++s1, ++s2; ++s1, ++s2;


Loading…
Cancel
Save