From 6f202377c7596f9b4225af9fb9c149212eed2162 Mon Sep 17 00:00:00 2001 From: dana Date: Fri, 3 May 2019 20:13:11 -0500 Subject: 44267: sort: Restore option to ignore backslashes Fix regression introduced by workers/41242 --- Src/sort.c | 25 ++++++++++++++++++++++++- 1 file changed, 24 insertions(+), 1 deletion(-) (limited to 'Src') diff --git a/Src/sort.c b/Src/sort.c index 92ee1c0d4..562b89491 100644 --- a/Src/sort.c +++ b/Src/sort.c @@ -33,6 +33,9 @@ /* Flag for direction of sort: 1 forwards, -1 reverse */ static int sortdir; +/* Flag that sort ignores backslashes */ +static int sortnobslash; + /* Flag that sort is numeric */ static int sortnumeric; @@ -113,9 +116,24 @@ eltpcmp(const void *a, const void *b) bs += (laststarta - as); as += (laststarta - as); } + + if (sortnobslash) { + while (*as && *bs) { + if (*as == '\\') + as++; + if (*bs == '\\') + bs++; + if (*as != *bs || !*as) + break; + as++; + bs++; + } + } + #ifdef HAVE_STRCOLL cmp = strcoll(as, bs); #endif + if (sortnumeric) { for (; *as == *bs && *as; as++, bs++); #ifndef HAVE_STRCOLL @@ -162,7 +180,10 @@ mod_export int zstrcmp(const char *as, const char *bs, int sortflags) { struct sortelt ae, be, *aeptr, *beptr; - int oldsortdir = sortdir, oldsortnumeric = sortnumeric, ret; + int oldsortdir = sortdir; + int oldsortnobslash = sortnobslash; + int oldsortnumeric = sortnumeric; + int ret; ae.cmp = as; be.cmp = bs; @@ -173,11 +194,13 @@ zstrcmp(const char *as, const char *bs, int sortflags) beptr = &be; sortdir = 1; + sortnobslash = (sortflags & SORTIT_IGNORING_BACKSLASHES) ? 1 : 0; sortnumeric = (sortflags & SORTIT_NUMERICALLY) ? 1 : 0; ret = eltpcmp(&aeptr, &beptr); /* Paranoia: I don't think we ever need to restore these. */ + sortnobslash = oldsortnobslash; sortnumeric = oldsortnumeric; sortdir = oldsortdir; -- cgit 1.4.1