[libvirt PATCH v2 04/56] src: remove usage of strchrnul function

Daniel P. Berrangé berrange at redhat.com
Tue Jan 28 13:10:45 UTC 2020


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.

Reviewed-by: Pavel Hrdina <phrdina at redhat.com>
Signed-off-by: Daniel P. Berrangé <berrange at redhat.com>
---
 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 dff2f6fd3a..526ce9da03 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




More information about the libvir-list mailing list