Double-escape was not encoded to escape. Test case in place.
char *dst, *src;
(*darray)[i] = nmem_strdupn(nmem, cp0, cp - cp0);
dst = src = (*darray)[i];
char *dst, *src;
(*darray)[i] = nmem_strdupn(nmem, cp0, cp - cp0);
dst = src = (*darray)[i];
- for (; (*dst = *src) != '\0'; src++)
- if (*src != escape_char)
- dst++;
+ if (*src == escape_char && src[1])
+ src++;
+ *dst++ = *src++;
YAZ_CHECK(num > 2 && !strcmp(array[2], "b,"));
YAZ_CHECK(num > 3 && !strcmp(array[3], "cd"));
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, '\\');
+ nmem_strsplit_escape(nmem, ",", "\\,a,b\\,,c\\d", &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 > 2 && !strcmp(array[2], "cd"));
YAZ_CHECK(num == 3);
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, '\\');
+ nmem_strsplit_escape(nmem, ",", "\\,a,b\\,\\,c\\\\\\|d", &array, &num, 0, '\\');
YAZ_CHECK(num == 2);
YAZ_CHECK(num > 0 && !strcmp(array[0], ",a"));
YAZ_CHECK(num == 2);
YAZ_CHECK(num > 0 && !strcmp(array[0], ",a"));
- YAZ_CHECK(num > 1 && !strcmp(array[1], "b,,cd"));
+ YAZ_CHECK(num > 1 && !strcmp(array[1], "b,,c\\|d"));
int main (int argc, char **argv)
{
YAZ_CHECK_INIT(argc, argv);
int main (int argc, char **argv)
{
YAZ_CHECK_INIT(argc, argv);
tst_nmem_malloc();
tst_nmem_strsplit();
YAZ_CHECK_TERM;
tst_nmem_malloc();
tst_nmem_strsplit();
YAZ_CHECK_TERM;