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];
+ for (; (*dst = *src) != '\0'; src++)
{
- if (*cp == escape_char)
- cp++;
- cp++;
+ if (*src != escape_char)
+ dst++;
}
- if (*darray)
- (*darray)[i] = nmem_strdupn(nmem, cp0, cp - cp0);
- i++;
+ }
+ i++;
+ if (!collapse)
+ {
if (!*cp)
break;
cp++;
YAZ_CHECK(num == 4);
YAZ_CHECK(num > 0 && !strcmp(array[0], ""));
YAZ_CHECK(num > 1 && !strcmp(array[1], "a"));
- YAZ_CHECK(num > 2 && !strcmp(array[2], "b\\,"));
+ YAZ_CHECK(num > 2 && !strcmp(array[2], "b,"));
YAZ_CHECK(num > 3 && !strcmp(array[3], "cd"));
nmem_strsplit_escape(nmem, ",", "\\,a,b\\,,cd", &array, &num, 0, '\\');
YAZ_CHECK(num == 3);
- YAZ_CHECK(num > 0 && !strcmp(array[0], "\\,a"));
- YAZ_CHECK(num > 1 && !strcmp(array[1], "b\\,"));
+ YAZ_CHECK(num > 0 && !strcmp(array[0], ",a"));
+ YAZ_CHECK(num > 1 && !strcmp(array[1], "b,"));
YAZ_CHECK(num > 2 && !strcmp(array[2], "cd"));
nmem_strsplit_escape(nmem, ",", "\\,a,b\\,\\,cd", &array, &num, 0, '\\');
YAZ_CHECK(num == 2);
- YAZ_CHECK(num > 0 && !strcmp(array[0], "\\,a"));
- YAZ_CHECK(num > 1 && !strcmp(array[1], "b\\,\\,cd"));
+ YAZ_CHECK(num > 0 && !strcmp(array[0], ",a"));
+ YAZ_CHECK(num > 1 && !strcmp(array[1], "b,,cd"));
nmem_destroy(nmem);
}