strv.c   strv.c 
skipping to change at line 204 skipping to change at line 204
if (r < 0) { if (r < 0) {
free(v); free(v);
return r; return r;
} }
} }
return 0; return 0;
} }
char **strv_split(const char *s, const char *separator) { char **strv_split(const char *s, const char *separator) {
char *state; const char *word, *state;
char *w;
size_t l; size_t l;
unsigned n, i; unsigned n, i;
char **r; char **r;
assert(s); assert(s);
n = 0; n = 0;
FOREACH_WORD_SEPARATOR(w, l, s, separator, state) FOREACH_WORD_SEPARATOR(word, l, s, separator, state)
n++; n++;
r = new(char*, n+1); r = new(char*, n+1);
if (!r) if (!r)
return NULL; return NULL;
i = 0; i = 0;
FOREACH_WORD_SEPARATOR(w, l, s, separator, state) { FOREACH_WORD_SEPARATOR(word, l, s, separator, state) {
r[i] = strndup(w, l); r[i] = strndup(word, l);
if (!r[i]) { if (!r[i]) {
strv_free(r); strv_free(r);
return NULL; return NULL;
} }
i++; i++;
} }
r[i] = NULL; r[i] = NULL;
return r; return r;
} }
char **strv_split_quoted(const char *s) { int strv_split_quoted(char ***t, const char *s) {
char *state; const char *word, *state;
char *w;
size_t l; size_t l;
unsigned n, i; unsigned n, i;
char **r; char **r;
assert(s); assert(s);
n = 0; n = 0;
FOREACH_WORD_QUOTED(w, l, s, state) FOREACH_WORD_QUOTED(word, l, s, state)
n++; n++;
if (!isempty(state))
/* bad syntax */
return -EINVAL;
r = new(char*, n+1); r = new(char*, n+1);
if (!r) if (!r)
return NULL; return -ENOMEM;
i = 0; i = 0;
FOREACH_WORD_QUOTED(w, l, s, state) { FOREACH_WORD_QUOTED(word, l, s, state) {
r[i] = cunescape_length(w, l); r[i] = cunescape_length(word, l);
if (!r[i]) { if (!r[i]) {
strv_free(r); strv_free(r);
return NULL; return -ENOMEM;
} }
i++; i++;
} }
r[i] = NULL; r[i] = NULL;
return r; *t = r;
return 0;
} }
char **strv_split_newlines(const char *s) { char **strv_split_newlines(const char *s) {
char **l; char **l;
unsigned n; unsigned n;
assert(s); assert(s);
/* Special version of strv_split() that splits on newlines and /* Special version of strv_split() that splits on newlines and
* suppresses an empty string at the end */ * suppresses an empty string at the end */
 End of changes. 10 change blocks. 
14 lines changed or deleted 16 lines changed or added

This html diff was produced by rfcdiff 1.41. The latest version is available from http://tools.ietf.org/tools/rfcdiff/