about summary refs log tree commit diff
path: root/Src
diff options
context:
space:
mode:
authordana <dana@dana.is>2019-05-03 20:13:11 -0500
committerdana <dana@dana.is>2019-05-03 20:13:48 -0500
commit6f202377c7596f9b4225af9fb9c149212eed2162 (patch)
treeecb888498575adfbaa5605d78571e9f6c2651f3b /Src
parent588bb77cb674a192eb176c01c8d17db1e9e4aba2 (diff)
downloadzsh-6f202377c7596f9b4225af9fb9c149212eed2162.tar.gz
zsh-6f202377c7596f9b4225af9fb9c149212eed2162.tar.xz
zsh-6f202377c7596f9b4225af9fb9c149212eed2162.zip
44267: sort: Restore option to ignore backslashes
Fix regression introduced by workers/41242
Diffstat (limited to 'Src')
-rw-r--r--Src/sort.c25
1 files changed, 24 insertions, 1 deletions
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;