[libvirt] [PATCH] virnetdev: fix some issues found by coverity and mingw builds

Pavel Hrdina phrdina at redhat.com
Mon Feb 2 18:31:50 UTC 2015


Commit e562a61a introduced new function to get/set interface state but
there was misuse of ATTRIBUTE_NONNULL on non-pointer attributes and also
we need to wrap that functions by #ifdef to not break mingw build.

Signed-off-by: Pavel Hrdina <phrdina at redhat.com>
---
 src/util/virnetdev.c | 94 ++++++++++++++++++++++++++++++++++++++++++++++++++--
 src/util/virnetdev.h | 12 +++----
 2 files changed, 96 insertions(+), 10 deletions(-)

diff --git a/src/util/virnetdev.c b/src/util/virnetdev.c
index 7a0a43d..d8a4867 100644
--- a/src/util/virnetdev.c
+++ b/src/util/virnetdev.c
@@ -671,12 +671,23 @@ int virNetDevSetIFFlag(const char *ifname,
  *
  * Returns 0 in case of success or -1 on error.
  */
+#if defined(SIOCSIFFLAGS) && defined(HAVE_STRUCT_IFREQ)
 int virNetDevSetOnline(const char *ifname,
                        bool online)
 {
 
     return virNetDevSetIFFlag(ifname, IFF_UP, online);
 }
+#else
+int virNetDevSetOnline(const char *ifname,
+                       bool online ATTRIBUTE_UNUSED)
+{
+    virReportSystemError(ENOSYS,
+                         _("Cannot set interface flags on '%s'"),
+                         ifname);
+    return -1;
+}
+#endif
 
 /**
  * virNetDevSetPromiscuous:
@@ -689,11 +700,22 @@ int virNetDevSetOnline(const char *ifname,
  *
  * Returns 0 in case of success or -1 on error.
  */
+#if defined(SIOCSIFFLAGS) && defined(HAVE_STRUCT_IFREQ)
 int virNetDevSetPromiscuous(const char *ifname,
                             bool promiscuous)
 {
     return virNetDevSetIFFlag(ifname, IFF_PROMISC, promiscuous);
 }
+#else
+int virNetDevSetPromiscuous(const char *ifname,
+                            bool promiscuous ATTRIBUTE_UNUSED)
+{
+    virReportSystemError(ENOSYS,
+                         _("Cannot set interface flags on '%s'"),
+                         ifname);
+    return -1;
+}
+#endif
 
 /**
  * virNetDevSetRcvMulti:
@@ -707,11 +729,22 @@ int virNetDevSetPromiscuous(const char *ifname,
  *
  * Returns 0 in case of success or -1 on error.
  */
+#if defined(SIOCSIFFLAGS) && defined(HAVE_STRUCT_IFREQ)
 int virNetDevSetRcvMulti(const char *ifname,
                          bool receive)
 {
     return virNetDevSetIFFlag(ifname, IFF_MULTICAST, receive);
 }
+#else
+int virNetDevSetRcvMulti(const char *ifname,
+                         bool receive ATTRIBUTE_UNUSED)
+{
+    virReportSystemError(ENOSYS,
+                         _("Cannot set interface flags on '%s'"),
+                         ifname);
+    return -1;
+}
+#endif
 
 /**
  * virNetDevSetRcvAllMulti:
@@ -723,11 +756,22 @@ int virNetDevSetRcvMulti(const char *ifname,
  *
  * Returns 0 in case of success or -1 on error.
  */
+#if defined(SIOCSIFFLAGS) && defined(HAVE_STRUCT_IFREQ)
 int virNetDevSetRcvAllMulti(const char *ifname,
                             bool receive)
 {
     return virNetDevSetIFFlag(ifname, IFF_ALLMULTI, receive);
 }
+#else
+int virNetDevSetRcvAllMulti(const char *ifname,
+                            bool receive ATTRIBUTE_UNUSED)
+{
+    virReportSystemError(ENOSYS,
+                         _("Cannot set interface flags on '%s'"),
+                         ifname);
+    return -1;
+}
+#endif
 
 
 #if defined(SIOCGIFFLAGS) && defined(HAVE_STRUCT_IFREQ)
@@ -776,11 +820,22 @@ int virNetDevGetIFFlag(const char *ifname,
  *
  * Returns 0 in case of success or an errno code in case of failure.
  */
+#if defined(SIOCSIFFLAGS) && defined(HAVE_STRUCT_IFREQ)
 int virNetDevGetOnline(const char *ifname,
                        bool *online)
 {
     return virNetDevGetIFFlag(ifname, IFF_UP, online);
 }
+#else
+int virNetDevGetOnline(const char *ifname,
+                       bool *online ATTRIBUTE_UNUSED)
+{
+    virReportSystemError(ENOSYS,
+                         _("Cannot get interface flags on '%s'"),
+                         ifname);
+    return -1;
+}
+#endif
 
 /**
  * virNetDevIsPromiscuous:
@@ -792,11 +847,22 @@ int virNetDevGetOnline(const char *ifname,
  *
  * Returns 0 in case of success or an errno code in case of failure.
  */
+#if defined(SIOCSIFFLAGS) && defined(HAVE_STRUCT_IFREQ)
 int virNetDevGetPromiscuous(const char *ifname,
-                           bool *promiscuous)
+                            bool *promiscuous)
 {
     return virNetDevGetIFFlag(ifname, IFF_PROMISC, promiscuous);
 }
+#else
+int virNetDevGetPromiscuous(const char *ifname,
+                            bool *promiscuous ATTRIBUTE_UNUSED)
+{
+    virReportSystemError(ENOSYS,
+                         _("Cannot get interface flags on '%s'"),
+                         ifname);
+    return -1;
+}
+#endif
 
 /**
  * virNetDevIsRcvMulti:
@@ -808,11 +874,22 @@ int virNetDevGetPromiscuous(const char *ifname,
  *
  * Returns 0 in case of success or -1 on error.
  */
+#if defined(SIOCSIFFLAGS) && defined(HAVE_STRUCT_IFREQ)
 int virNetDevGetRcvMulti(const char *ifname,
-                        bool *receive)
+                         bool *receive)
 {
     return virNetDevGetIFFlag(ifname, IFF_MULTICAST, receive);
 }
+#else
+int virNetDevGetRcvMulti(const char *ifname,
+                         bool *receive ATTRIBUTE_UNUSED)
+{
+    virReportSystemError(ENOSYS,
+                         _("Cannot get interface flags on '%s'"),
+                         ifname);
+    return -1;
+}
+#endif
 
 /**
  * virNetDevIsRcvAllMulti:
@@ -824,11 +901,22 @@ int virNetDevGetRcvMulti(const char *ifname,
  *
  * Returns 0 in case of success or -1 on error.
  */
+#if defined(SIOCSIFFLAGS) && defined(HAVE_STRUCT_IFREQ)
 int virNetDevGetRcvAllMulti(const char *ifname,
-                           bool *receive)
+                            bool *receive)
 {
     return virNetDevGetIFFlag(ifname, IFF_ALLMULTI, receive);
 }
+#else
+int virNetDevGetRcvAllMulti(const char *ifname,
+                            bool *receive ATTRIBUTE_UNUSED)
+{
+    virReportSystemError(ENOSYS,
+                         _("Cannot get interface flags on '%s'"),
+                         ifname);
+    return -1;
+}
+#endif
 
 
 /**
diff --git a/src/util/virnetdev.h b/src/util/virnetdev.h
index 8d03459..1001e43 100644
--- a/src/util/virnetdev.h
+++ b/src/util/virnetdev.h
@@ -201,25 +201,23 @@ int virNetDevDelMulti(const char *ifname,
     ATTRIBUTE_NONNULL(1) ATTRIBUTE_NONNULL(2) ATTRIBUTE_RETURN_CHECK;
 
 int virNetDevSetIFFlag(const char *ifname, int flag, bool val)
-    ATTRIBUTE_NONNULL(1) ATTRIBUTE_NONNULL(2) ATTRIBUTE_NONNULL(3)
-    ATTRIBUTE_RETURN_CHECK;
+    ATTRIBUTE_NONNULL(1) ATTRIBUTE_RETURN_CHECK;
 
 int virNetDevGetIFFlag(const char *ifname, int flag, bool *val)
-    ATTRIBUTE_NONNULL(1) ATTRIBUTE_NONNULL(2) ATTRIBUTE_NONNULL(3)
-    ATTRIBUTE_RETURN_CHECK;
+    ATTRIBUTE_NONNULL(1) ATTRIBUTE_NONNULL(3) ATTRIBUTE_RETURN_CHECK;
 
 int virNetDevSetPromiscuous(const char *ifname, bool promiscuous)
-    ATTRIBUTE_NONNULL(1) ATTRIBUTE_NONNULL(2) ATTRIBUTE_RETURN_CHECK;
+    ATTRIBUTE_NONNULL(1) ATTRIBUTE_RETURN_CHECK;
 int virNetDevGetPromiscuous(const char *ifname, bool *promiscuous)
     ATTRIBUTE_NONNULL(1) ATTRIBUTE_NONNULL(2) ATTRIBUTE_RETURN_CHECK;
 
 int virNetDevSetRcvMulti(const char *ifname, bool receive)
-    ATTRIBUTE_NONNULL(1) ATTRIBUTE_NONNULL(2) ATTRIBUTE_RETURN_CHECK;
+    ATTRIBUTE_NONNULL(1) ATTRIBUTE_RETURN_CHECK;
 int virNetDevGetRcvMulti(const char *ifname, bool *receive)
     ATTRIBUTE_NONNULL(1) ATTRIBUTE_NONNULL(2) ATTRIBUTE_RETURN_CHECK;
 
 int virNetDevSetRcvAllMulti(const char *ifname, bool receive)
-    ATTRIBUTE_NONNULL(1) ATTRIBUTE_NONNULL(2) ATTRIBUTE_RETURN_CHECK;
+    ATTRIBUTE_NONNULL(1) ATTRIBUTE_RETURN_CHECK;
 int virNetDevGetRcvAllMulti(const char *ifname, bool *receive)
     ATTRIBUTE_NONNULL(1) ATTRIBUTE_NONNULL(2) ATTRIBUTE_RETURN_CHECK;
 #endif /* __VIR_NETDEV_H__ */
-- 
2.0.5




More information about the libvir-list mailing list