diff options
author | Keno Fischer <keno@juliacomputing.com> | 2018-06-29 12:32:10 +0200 |
---|---|---|
committer | Greg Kurz <groug@kaod.org> | 2018-06-29 12:32:10 +0200 |
commit | 5c99fa375da1c7cc4a42a93e002e98b9fb34754b (patch) | |
tree | 96dd1387a3a911dfb5ef5d97a4775028b87ba560 /util | |
parent | 609ef9f451759151d0bfe7c3843410ab94d68f18 (diff) | |
download | qemu-5c99fa375da1c7cc4a42a93e002e98b9fb34754b.zip qemu-5c99fa375da1c7cc4a42a93e002e98b9fb34754b.tar.gz qemu-5c99fa375da1c7cc4a42a93e002e98b9fb34754b.tar.bz2 |
cutils: Provide strchrnul
strchrnul is a GNU extension and thus unavailable on a number of targets.
In the review for a commit removing strchrnul from 9p, I was asked to
create a qemu_strchrnul helper to factor out this functionality.
Do so, and use it in a number of other places in the code base that inlined
the replacement pattern in a place where strchrnul could be used.
Signed-off-by: Keno Fischer <keno@juliacomputing.com>
Acked-by: Greg Kurz <groug@kaod.org>
Reviewed-by: Markus Armbruster <armbru@redhat.com>
Signed-off-by: Greg Kurz <groug@kaod.org>
Diffstat (limited to 'util')
-rw-r--r-- | util/cutils.c | 15 | ||||
-rw-r--r-- | util/qemu-option.c | 6 | ||||
-rw-r--r-- | util/uri.c | 6 |
3 files changed, 18 insertions, 9 deletions
diff --git a/util/cutils.c b/util/cutils.c index 0de69e6..9205e09 100644 --- a/util/cutils.c +++ b/util/cutils.c @@ -545,6 +545,21 @@ int qemu_strtou64(const char *nptr, const char **endptr, int base, } /** + * Searches for the first occurrence of 'c' in 's', and returns a pointer + * to the trailing null byte if none was found. + */ +#ifndef HAVE_STRCHRNUL +const char *qemu_strchrnul(const char *s, int c) +{ + const char *e = strchr(s, c); + if (!e) { + e = s + strlen(s); + } + return e; +} +#endif + +/** * parse_uint: * * @s: String to parse diff --git a/util/qemu-option.c b/util/qemu-option.c index ba44a08..19761e3 100644 --- a/util/qemu-option.c +++ b/util/qemu-option.c @@ -77,11 +77,7 @@ const char *get_opt_value(const char *p, char **value) *value = NULL; while (1) { - offset = strchr(p, ','); - if (!offset) { - offset = p + strlen(p); - } - + offset = qemu_strchrnul(p, ','); length = offset - p; if (*offset != '\0' && *(offset + 1) == ',') { length++; @@ -52,6 +52,7 @@ */ #include "qemu/osdep.h" +#include "qemu/cutils.h" #include "qemu/uri.h" @@ -2266,10 +2267,7 @@ struct QueryParams *query_params_parse(const char *query) /* Find the next separator, or end of the string. */ end = strchr(query, '&'); if (!end) { - end = strchr(query, ';'); - } - if (!end) { - end = query + strlen(query); + end = qemu_strchrnul(query, ';'); } /* Find the first '=' character between here and end. */ |