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++;