The strchrnul function doesn't exist on Windows and rather than attempt to implement it, it is simpler to just avoid its usage, as any callers are easily adapted. Signed-off-by: Daniel P. Berrangé <berrange@xxxxxxxxxx> --- src/openvz/openvz_conf.c | 4 +++- src/security/security_selinux.c | 16 ++++++++-------- src/util/vircgroup.c | 10 +++++++--- src/util/virdnsmasq.c | 9 +++++++-- src/util/virsysinfo.c | 14 ++++++++------ tests/testutils.c | 2 +- 6 files changed, 34 insertions(+), 21 deletions(-) diff --git a/src/openvz/openvz_conf.c b/src/openvz/openvz_conf.c index e9ee1a7bf4..1ec42c1d93 100644 --- a/src/openvz/openvz_conf.c +++ b/src/openvz/openvz_conf.c @@ -245,7 +245,9 @@ openvzReadNetworkConf(virDomainDefPtr def, /*parse string*/ do { - char *next = strchrnul(p, ','); + char *next = strchr(p, ','); + if (!next) + next = strchr(p, '\0'); if (STRPREFIX(p, "ifname=")) { /* skip in libvirt */ } else if (STRPREFIX(p, "host_ifname=")) { diff --git a/src/security/security_selinux.c b/src/security/security_selinux.c index 21279e7622..2fd9c113f3 100644 --- a/src/security/security_selinux.c +++ b/src/security/security_selinux.c @@ -721,14 +721,14 @@ virSecuritySELinuxQEMUInitialize(virSecurityManagerPtr mgr) goto error; } - ptr = strchrnul(data->domain_context, '\n'); - if (ptr && *ptr == '\n') { + ptr = strchr(data->domain_context, '\n'); + if (ptr) { *ptr = '\0'; ptr++; if (*ptr != '\0') { data->alt_domain_context = g_strdup(ptr); - ptr = strchrnul(data->alt_domain_context, '\n'); - if (ptr && *ptr == '\n') + ptr = strchr(data->alt_domain_context, '\n'); + if (ptr) *ptr = '\0'; } } @@ -743,12 +743,12 @@ virSecuritySELinuxQEMUInitialize(virSecurityManagerPtr mgr) goto error; } - ptr = strchrnul(data->file_context, '\n'); - if (ptr && *ptr == '\n') { + ptr = strchr(data->file_context, '\n'); + if (ptr) { *ptr = '\0'; data->content_context = g_strdup(ptr + 1); - ptr = strchrnul(data->content_context, '\n'); - if (ptr && *ptr == '\n') + ptr = strchr(data->content_context, '\n'); + if (ptr) *ptr = '\0'; } diff --git a/src/util/vircgroup.c b/src/util/vircgroup.c index 87ed9f4565..4aa1918c1b 100644 --- a/src/util/vircgroup.c +++ b/src/util/vircgroup.c @@ -174,9 +174,13 @@ virCgroupPartitionNeedsEscaping(const char *path) if (STRPREFIX(line, "#subsys_name")) continue; - tmp = strchrnul(line, ' '); - *tmp = '\0'; - len = tmp - line; + tmp = strchr(line, ' '); + if (tmp) { + *tmp = '\0'; + len = tmp - line; + } else { + len = strlen(line); + } if (STRPREFIX(path, line) && path[len] == '.') { diff --git a/src/util/virdnsmasq.c b/src/util/virdnsmasq.c index 2555f3110f..adc6f96bb6 100644 --- a/src/util/virdnsmasq.c +++ b/src/util/virdnsmasq.c @@ -640,6 +640,7 @@ dnsmasqCapsSet(dnsmasqCapsPtr caps, static int dnsmasqCapsSetFromBuffer(dnsmasqCapsPtr caps, const char *buf) { + int len; const char *p; caps->noRefresh = true; @@ -675,10 +676,14 @@ dnsmasqCapsSetFromBuffer(dnsmasqCapsPtr caps, const char *buf) return 0; fail: - p = strchrnul(buf, '\n'); + p = strchr(buf, '\n'); + if (!p) + len = strlen(buf); + else + len = p - buf; virReportError(VIR_ERR_INTERNAL_ERROR, _("cannot parse %s version number in '%.*s'"), - caps->binaryPath, (int) (p - buf), buf); + caps->binaryPath, len, buf); return -1; } diff --git a/src/util/virsysinfo.c b/src/util/virsysinfo.c index c526c0322f..4cc4523be0 100644 --- a/src/util/virsysinfo.c +++ b/src/util/virsysinfo.c @@ -460,18 +460,20 @@ virSysinfoReadARM(void) return g_steal_pointer(&ret); } -static char * +static const char * virSysinfoParseS390Delimited(const char *base, const char *name, char **value, char delim1, char delim2) { const char *start; - char *end; + const char *end; if (delim1 != delim2 && (start = strstr(base, name)) && (start = strchr(start, delim1))) { start += 1; - end = strchrnul(start, delim2); + end = strchr(start, delim2); + if (!end) + end = start + strlen(start); virSkipSpaces(&start); *value = g_strndup(start, end - start); virTrimSpaces(*value, NULL); @@ -480,7 +482,7 @@ virSysinfoParseS390Delimited(const char *base, const char *name, char **value, return NULL; } -static char * +static const char * virSysinfoParseS390Line(const char *base, const char *name, char **value) { return virSysinfoParseS390Delimited(base, name, value, ':', '\n'); @@ -521,7 +523,7 @@ virSysinfoParseS390System(const char *base, virSysinfoSystemDefPtr *sysdef) static int virSysinfoParseS390Processor(const char *base, virSysinfoDefPtr ret) { - char *tmp_base; + const char *tmp_base; char *manufacturer = NULL; char *procline = NULL; char *ncpu = NULL; @@ -555,7 +557,7 @@ virSysinfoParseS390Processor(const char *base, virSysinfoDefPtr ret) } /* now, for each processor found, extract the frequency information */ - tmp_base = (char *) base; + tmp_base = base; while ((tmp_base = strstr(tmp_base, "cpu number")) && (tmp_base = virSysinfoParseS390Line(tmp_base, "cpu number", &ncpu))) { diff --git a/tests/testutils.c b/tests/testutils.c index b490609e36..248f9ee8be 100644 --- a/tests/testutils.c +++ b/tests/testutils.c @@ -1200,7 +1200,7 @@ virTestCounterReset(const char *prefix) virtTestCounter = 0; ignore_value(virStrcpyStatic(virtTestCounterStr, prefix)); - virtTestCounterPrefixEndOffset = strchrnul(virtTestCounterStr, '\0'); + virtTestCounterPrefixEndOffset = virtTestCounterStr + strlen(virtTestCounterStr); } -- 2.24.1