summaryrefslogtreecommitdiff
path: root/Src/Zle
diff options
context:
space:
mode:
Diffstat (limited to 'Src/Zle')
-rw-r--r--Src/Zle/compcore.c7
-rw-r--r--Src/Zle/computil.c2
-rw-r--r--Src/Zle/zle_tricky.c20
3 files changed, 14 insertions, 15 deletions
diff --git a/Src/Zle/compcore.c b/Src/Zle/compcore.c
index 2259db01a..3e4f690f3 100644
--- a/Src/Zle/compcore.c
+++ b/Src/Zle/compcore.c
@@ -3028,7 +3028,7 @@ matchcmp(Cmatch *a, Cmatch *b)
if ((*b)->disp && !((*b)->flags & CMF_MORDER))
return 1;
- return strbpcmp(&((*a)->str), &((*b)->str));
+ return zstrbcmp((*a)->str, (*b)->str);
}
/* This tests whether two matches are equal (would produce the same
@@ -3077,8 +3077,9 @@ makearray(LinkList l, int type, int flags, int *np, int *nlp, int *llp)
char **ap, **bp, **cp;
/* Now sort the array (it contains strings). */
- qsort((void *) rp, n, sizeof(char *),
- (int (*) _((const void *, const void *)))strbpcmp);
+ strmetasort((char **)rp, SORTIT_IGNORING_BACKSLASHES |
+ (isset(NUMERICGLOBSORT) ? SORTIT_NUMERICALLY : 0),
+ NULL);
/* And delete the ones that occur more than once. */
for (ap = cp = (char **) rp; *ap; ap++) {
diff --git a/Src/Zle/computil.c b/Src/Zle/computil.c
index ce70dee72..1dbefa589 100644
--- a/Src/Zle/computil.c
+++ b/Src/Zle/computil.c
@@ -213,7 +213,7 @@ cd_calc()
static int
cd_sort(const void *a, const void *b)
{
- return strpcmp(&(*((Cdstr *) a))->sortstr, &(*((Cdstr *) b))->sortstr);
+ return zstrpcmp((*((Cdstr *) a))->sortstr, (*((Cdstr *) b))->sortstr, 0);
}
static int
diff --git a/Src/Zle/zle_tricky.c b/Src/Zle/zle_tricky.c
index 1393027f7..845f74bc5 100644
--- a/Src/Zle/zle_tricky.c
+++ b/Src/Zle/zle_tricky.c
@@ -2100,28 +2100,26 @@ sfxlen(char *s, char *t)
}
#endif
-/* This is strcmp with ignoring backslashes. */
+/* This is zstrcmp with ignoring backslashes. */
/**/
mod_export int
-strbpcmp(char **aa, char **bb)
+zstrbcmp(const char *a, const char *b)
{
- char *a = *aa, *b = *bb;
+ const char *astart = a;
while (*a && *b) {
if (*a == '\\')
a++;
if (*b == '\\')
b++;
- if (*a != *b)
+ if (*a != *b || !*a)
break;
- if (*a)
- a++;
- if (*b)
- b++;
+ a++;
+ b++;
}
if (isset(NUMERICGLOBSORT) && (idigit(*a) || idigit(*b))) {
- for (; a > *aa && idigit(a[-1]); a--, b--);
+ for (; a > astart && idigit(a[-1]); a--, b--);
if (idigit(*a) && idigit(*b)) {
while (*a == '0')
a++;
@@ -2310,8 +2308,8 @@ listlist(LinkList l)
*p = (char *) getdata(node);
*p = NULL;
- qsort((void *) data, num, sizeof(char *),
- (int (*) _((const void *, const void *))) strbpcmp);
+ strmetasort((char **)data, SORTIT_IGNORING_BACKSLASHES |
+ (isset(NUMERICGLOBSORT) ? SORTIT_NUMERICALLY : 0), NULL);
for (p = data, lenp = lens; *p; p++, lenp++) {
len = *lenp = ZMB_nicewidth(*p) + 2;