From 921aec17b6660f580056edfe6f411c467530a74a Mon Sep 17 00:00:00 2001 From: antirez Date: Wed, 6 Mar 2013 12:14:42 +0100 Subject: [PATCH] sdssplitargs(): now returns NULL only on error. An empty input string also resulted into the function returning NULL making it harder for the caller to distinguish between error and empty string without checking the original input string length. --- src/sds.c | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/src/sds.c b/src/sds.c index 85858a4f..74fb274a 100644 --- a/src/sds.c +++ b/src/sds.c @@ -480,6 +480,11 @@ int hex_digit_to_int(char c) { * * Note that sdscatrepr() is able to convert back a string into * a quoted string in the same format sdssplitargs() is able to parse. + * + * The function returns the allocated tokens on success, even when the + * input string is empty, or NULL if the input contains unbalanced + * quotes or closed quotes followed by non space characters + * as in: "foo"bar or "foo' */ sds *sdssplitargs(const char *line, int *argc) { const char *p = line; @@ -576,6 +581,9 @@ sds *sdssplitargs(const char *line, int *argc) { (*argc)++; current = NULL; } else { + /* Even on empty input string returns something not NULL that + * can be freed by sdssplitargs_free. */ + if (vector == NULL) vector = zmalloc(sizeof(void*)); return vector; } } -- GitLab