+ do {
+ switch(**str) {
+ case '\\':
+ parse_backslash(str, target);
+ continue;
+ case '\'':
+ parse_single_quote(ctx, str, target);
+ break;
+ case '"':
+ parse_double_quote(ctx, str, target);
+ break;
+ case 0:
+ goto done;
+ default:
+ addc(target, str);
+ break;
+ }
+ } while (**str && !isspace(**str));
+done:
+
+ /*
+ * if the string was unquoted and we've stopped at a whitespace
+ * character, skip to the next one, because the whitespace will
+ * be overwritten by a null byte here
+ */
+ if (**str)