*tk_end = NULL,
*end = NULL,
*p;
- int open_quote = 0;
+ int open_quote = 0, terminated = 0;
for (p = *str; p && *p; p++) {
if (!tk_begin) {
if (!tk_end)
return NULL;
- end = isblank(*tk_end) ? (char *) skip_blank(tk_end) : tk_end;
- if (*end == ',' || *end == ';')
+
+ end = tk_end;
+
+ /* skip closing quotes */
+ if (*end == '"')
+ end++;
+
+ /* token is terminated by blank (or blank is before "," or ";") */
+ if (isblank(*end)) {
+ end = (char *) skip_blank(end);
+ terminated++;
+ }
+
+ /* token is terminated by "," or ";" */
+ if (*end == ',' || *end == ';') {
end++;
+ terminated++;
+
+ /* token is terminated by \0 */
+ } else if (!*end)
+ terminated++;
+
+ if (!terminated) {
+ DBG(SCRIPT, ul_debug("unterminated token '%s'", end));
+ return NULL;
+ }
+
+ /* skip extra space after terminator */
+ end = (char *) skip_blank(end);
*tk_end = '\0';
*str = end;