s = buf;
while (*p && buflen-- > 1) {
+ /*
+ * We're looking for strings. Stop on spaces, or
+ * (if given a token list), on a token, or on a
+ * comma.
+ */
+ if (!quote) {
+ if (isspace((int) *p)) {
+ break;
+ }
+
+ if (tok) {
+ for (t = tokenlist; t->name; t++) {
+ if (TOKEN_MATCH(p, t->name)) {
+ *s++ = 0;
+ goto done;
+ }
+ }
+ }
+ if (*p == ',') break;
+
+ /*
+ * Copy the character over.
+ */
+ *s++ = *p++;
+ continue;
+ }
+
if (unescape && quote && (*p == '\\')) {
p++;
p++;
break;
}
-
- /*
- * We're looking for strings. Stop on spaces, or
- * (if given a token list), on a token, or on a
- * comma.
- */
- if (!quote) {
- if (isspace((int) *p)) {
- break;
- }
-
- if (tok) {
- for (t = tokenlist; t->name; t++) {
- if (TOKEN_MATCH(p, t->name)) {
- *s++ = 0;
- goto done;
- }
- }
- }
- if (*p == ',') break;
- }
*s++ = *p++;
}