Another fix for nmem_strsplit_escape
[yaz-moved-to-github.git] / src / nmemsdup.c
index fcfb074..75b6e85 100644 (file)
@@ -91,29 +91,31 @@ void nmem_strsplit_escape(NMEM nmem, const char *delim, const char *dstr,
                     cp++;
                 if (!*cp)
                     break;
-                cp0 = cp;
-                while (*cp && !strchr(delim, *cp))
-                {
-                    if (*cp == escape_char)
-                        cp++;
+            }
+
+            cp0 = cp;
+            while (*cp && !strchr(delim, *cp))
+            {
+                if (*cp == escape_char)
                     cp++;
-                }
-                if (*darray)
-                    (*darray)[i] = nmem_strdupn(nmem, cp0, cp - cp0);
-                i++;
+                cp++;
             }
-            else
+            if (*darray)
             {
-                cp0 = cp;
-                while (*cp && !strchr(delim, *cp))
+                char *dst, *src;
+                (*darray)[i] = nmem_strdupn(nmem, cp0, cp - cp0);
+                dst = src = (*darray)[i];
+                while (*src != '\0')
                 {
-                    if (*cp == escape_char)
-                        cp++;
-                    cp++;
+                    if (*src == escape_char && src[1])
+                        src++;
+                    *dst++ = *src++;
                 }
-                if (*darray)
-                    (*darray)[i] = nmem_strdupn(nmem, cp0, cp - cp0);
-                i++;
+                *dst = '\0';
+            }
+            i++;
+            if (!collapse)
+            {
                 if (!*cp)
                     break;
                 cp++;