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/ |