[PATCH] virStringListLength: Ensure const correctness

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



The virStringListLength function does not ever modify the passed
string list. It merely counts the items in it. Make sure that we
reflect this bit in the function header.

Signed-off-by: Michal Privoznik <mprivozn@xxxxxxxxxx>
---

This is hugely driven by a compilation error observed after the latest Martin
revert (ea913d185df9). I'm seeing this compilation error:

util/virpolkit.c: In function 'virPolkitCheckAuth':
util/virpolkit.c:93:47: error: passing argument 1 of 'virStringListLength' from incompatible pointer type [-Werror]
                           virStringListLength(details) / 2,
                                               ^
In file included from util/virpolkit.c:33:0:
util/virstring.h:204:8: note: expected 'char **' but argument is of type 'const char **'
 size_t virStringListLength(char **strings);

But for some reason, implicit typecast from char ** to const char ** nor const
char * const * is allowed by gcc. I don't really understand why, so if anybody
has some explanation, please do explain.

 src/lxc/lxc_native.c         | 2 +-
 src/storage/storage_driver.c | 2 +-
 src/util/virprocess.c        | 2 +-
 src/util/virstoragefile.c    | 2 +-
 src/util/virstring.c         | 2 +-
 src/util/virstring.h         | 2 +-
 tests/virstringtest.c        | 4 ++--
 7 files changed, 8 insertions(+), 8 deletions(-)

diff --git a/src/lxc/lxc_native.c b/src/lxc/lxc_native.c
index 78f9c67..ef92c7d 100644
--- a/src/lxc/lxc_native.c
+++ b/src/lxc/lxc_native.c
@@ -611,7 +611,7 @@ lxcNetworkWalkCallback(const char *name, virConfValuePtr value, void *data)
             family = AF_INET6;
 
         ipparts = virStringSplit(value->str, "/", 2);
-        if (virStringListLength(ipparts) != 2 ||
+        if (virStringListLength((const char * const *)ipparts) != 2 ||
             virSocketAddrParse(&ip->address, ipparts[0], family) < 0 ||
             virStrToLong_ui(ipparts[1], NULL, 10, &ip->prefix) < 0) {
 
diff --git a/src/storage/storage_driver.c b/src/storage/storage_driver.c
index ed5395b..8ee2840 100644
--- a/src/storage/storage_driver.c
+++ b/src/storage/storage_driver.c
@@ -3209,7 +3209,7 @@ virStorageAddISCSIPoolSourceHost(virDomainDiskDefPtr def,
     if (!(tokens = virStringSplit(def->src->srcpool->volume, ":", 0)))
         goto cleanup;
 
-    if (virStringListLength(tokens) != 4) {
+    if (virStringListLength((const char * const *)tokens) != 4) {
         virReportError(VIR_ERR_INTERNAL_ERROR,
                        _("unexpected iscsi volume name '%s'"),
                        def->src->srcpool->volume);
diff --git a/src/util/virprocess.c b/src/util/virprocess.c
index 277b3bc..c7ffa42 100644
--- a/src/util/virprocess.c
+++ b/src/util/virprocess.c
@@ -965,7 +965,7 @@ int virProcessGetStartTime(pid_t pid,
 
     tokens = virStringSplit(tmp, " ", 0);
 
-    if (virStringListLength(tokens) < 20) {
+    if (virStringListLength((const char * const *)tokens) < 20) {
         virReportError(VIR_ERR_INTERNAL_ERROR,
                        _("Cannot find start time in %s"),
                        filename);
diff --git a/src/util/virstoragefile.c b/src/util/virstoragefile.c
index 101070f..5a4e101 100644
--- a/src/util/virstoragefile.c
+++ b/src/util/virstoragefile.c
@@ -1283,7 +1283,7 @@ virStorageFileParseChainIndex(const char *diskTarget,
     if (name && diskTarget)
         strings = virStringSplit(name, "[", 2);
 
-    if (virStringListLength(strings) != 2)
+    if (virStringListLength((const char * const *) strings) != 2)
         goto cleanup;
 
     if (virStrToLong_uip(strings[1], &suffix, 10, &idx) < 0 ||
diff --git a/src/util/virstring.c b/src/util/virstring.c
index fc4f5ba..7ec42aa 100644
--- a/src/util/virstring.c
+++ b/src/util/virstring.c
@@ -765,7 +765,7 @@ virStrndup(char **dest,
 }
 
 
-size_t virStringListLength(char **strings)
+size_t virStringListLength(const char * const *strings)
 {
     size_t i = 0;
 
diff --git a/src/util/virstring.h b/src/util/virstring.h
index cdf1058..16ed3b2 100644
--- a/src/util/virstring.h
+++ b/src/util/virstring.h
@@ -201,7 +201,7 @@ int virVasprintfInternal(bool report, int domcode, const char *filename,
 # define VIR_STRNDUP_QUIET(dst, src, n) virStrndup(&(dst), src, n, false, \
                                                    0, NULL, NULL, 0)
 
-size_t virStringListLength(char **strings);
+size_t virStringListLength(const char * const *strings);
 
 /**
  * virVasprintf
diff --git a/tests/virstringtest.c b/tests/virstringtest.c
index 38d0126..7a1dcfd 100644
--- a/tests/virstringtest.c
+++ b/tests/virstringtest.c
@@ -336,10 +336,10 @@ testStringSearch(const void *opaque)
             goto cleanup;
         }
 
-        if (virStringListLength(matches) != nmatches) {
+        if (virStringListLength((const char * const *)matches) != nmatches) {
             fprintf(stderr, "expected %zu matches on %s but got %zd matches\n",
                     data->expectNMatches, data->str,
-                    virStringListLength(matches));
+                    virStringListLength((const char * const *)matches));
             goto cleanup;
         }
 
-- 
2.4.10

--
libvir-list mailing list
libvir-list@xxxxxxxxxx
https://www.redhat.com/mailman/listinfo/libvir-list



[Index of Archives]     [Virt Tools]     [Libvirt Users]     [Lib OS Info]     [Fedora Users]     [Fedora Desktop]     [Fedora SELinux]     [Big List of Linux Books]     [Yosemite News]     [KDE Users]     [Fedora Tools]