[libvirt] [PATCHv2 05/27] util: reject unknown flags, and prefer unsigned flags

Eric Blake eblake at redhat.com
Fri Jul 8 19:25:47 UTC 2011


Silently ignored flags get in the way of new features that
use those flags.  Also, an upcoming syntax check will favor
unsigned flags.

* src/nodeinfo.h (nodeGetCPUStats, nodeGetMemoryStats): Drop
unused attribute.
* src/interface/netcf_driver.c (interfaceOpenInterface)
(interfaceDefineXML, interfaceCreate, interfaceDestroy): Reject
unknown flags.
* src/network/bridge_driver.c (networkOpenNetwork)
(networkGetXMLDesc): Likewise.
* src/nwfilter/nwfilter_driver.c (nwfilterOpen): Likewise.
* src/secret/secret_driver.c (secretOpen, secretDefineXML)
(secretGetXMLDesc, secretSetValue): Likewise.
* src/util/logging.c (virLogDefineFilter, virLogDefineOutput)
(virLogMessage): Likewise; also use unsigned flags.
* src/util/logging.h (virLogDefineFilter, virLogDefineOutput)
(virLogMessage): Change signature.
* src/util/command.c (virExecWithHook): Likewise.
---

v2: rebase, fix driver open bug, and add in a few more instances
(same goes for next 15 or so patches)

 src/interface/netcf_driver.c   |   16 ++++++++++++----
 src/network/bridge_driver.c    |    9 +++++++--
 src/nodeinfo.h                 |    6 +++---
 src/nwfilter/nwfilter_driver.c |    4 +++-
 src/secret/secret_driver.c     |   17 +++++++++++++----
 src/util/command.c             |   16 ++++++++--------
 src/util/logging.c             |   13 ++++++++++---
 src/util/logging.h             |    8 +++++---
 8 files changed, 61 insertions(+), 28 deletions(-)

diff --git a/src/interface/netcf_driver.c b/src/interface/netcf_driver.c
index 8900722..855b5a3 100644
--- a/src/interface/netcf_driver.c
+++ b/src/interface/netcf_driver.c
@@ -121,10 +121,12 @@ static struct netcf_if *interfaceDriverGetNetcfIF(struct netcf *ncf, virInterfac

 static virDrvOpenStatus interfaceOpenInterface(virConnectPtr conn,
                                                virConnectAuthPtr auth ATTRIBUTE_UNUSED,
-                                               unsigned int flags ATTRIBUTE_UNUSED)
+                                               unsigned int flags)
 {
     struct interface_driver *driverState;

+    virCheckFlags(VIR_CONNECT_RO, VIR_DRV_OPEN_ERROR);
+
     if (VIR_ALLOC(driverState) < 0)
     {
         virReportOOMError();
@@ -387,7 +389,7 @@ cleanup:

 static virInterfacePtr interfaceDefineXML(virConnectPtr conn,
                                           const char *xml,
-                                          unsigned int flags ATTRIBUTE_UNUSED)
+                                          unsigned int flags)
 {
     struct interface_driver *driver = conn->interfacePrivateData;
     struct netcf_if *iface = NULL;
@@ -395,6 +397,8 @@ static virInterfacePtr interfaceDefineXML(virConnectPtr conn,
     virInterfaceDefPtr ifacedef = NULL;
     virInterfacePtr ret = NULL;

+    virCheckFlags(0, NULL);
+
     interfaceDriverLock(driver);

     ifacedef = virInterfaceDefParseString(xml);
@@ -461,12 +465,14 @@ cleanup:
 }

 static int interfaceCreate(virInterfacePtr ifinfo,
-                           unsigned int flags ATTRIBUTE_UNUSED)
+                           unsigned int flags)
 {
     struct interface_driver *driver = ifinfo->conn->interfacePrivateData;
     struct netcf_if *iface = NULL;
     int ret = -1;

+    virCheckFlags(0, -1);
+
     interfaceDriverLock(driver);

     iface = interfaceDriverGetNetcfIF(driver->netcf, ifinfo);
@@ -493,12 +499,14 @@ cleanup:
 }

 static int interfaceDestroy(virInterfacePtr ifinfo,
-                            unsigned int flags ATTRIBUTE_UNUSED)
+                            unsigned int flags)
 {
     struct interface_driver *driver = ifinfo->conn->interfacePrivateData;
     struct netcf_if *iface = NULL;
     int ret = -1;

+    virCheckFlags(0, -1);
+
     interfaceDriverLock(driver);

     iface = interfaceDriverGetNetcfIF(driver->netcf, ifinfo);
diff --git a/src/network/bridge_driver.c b/src/network/bridge_driver.c
index 554a8ac..0a12bc0 100644
--- a/src/network/bridge_driver.c
+++ b/src/network/bridge_driver.c
@@ -2010,7 +2010,10 @@ cleanup:

 static virDrvOpenStatus networkOpenNetwork(virConnectPtr conn,
                                            virConnectAuthPtr auth ATTRIBUTE_UNUSED,
-                                           unsigned int flags ATTRIBUTE_UNUSED) {
+                                           unsigned int flags)
+{
+    virCheckFlags(VIR_CONNECT_RO, VIR_DRV_OPEN_ERROR);
+
     if (!driverState)
         return VIR_DRV_OPEN_DECLINED;

@@ -2416,12 +2419,14 @@ cleanup:
 }

 static char *networkGetXMLDesc(virNetworkPtr net,
-                               unsigned int flags ATTRIBUTE_UNUSED)
+                               unsigned int flags)
 {
     struct network_driver *driver = net->conn->networkPrivateData;
     virNetworkObjPtr network;
     char *ret = NULL;

+    virCheckFlags(0, NULL);
+
     networkDriverLock(driver);
     network = virNetworkFindByUUID(&driver->networks, net->uuid);
     networkDriverUnlock(driver);
diff --git a/src/nodeinfo.h b/src/nodeinfo.h
index 9b2658f..e5ac1e0 100644
--- a/src/nodeinfo.h
+++ b/src/nodeinfo.h
@@ -1,7 +1,7 @@
 /*
  * nodeinfo.c: Helper routines for OS specific node information
  *
- * Copyright (C) 2006-2008 Red Hat, Inc.
+ * Copyright (C) 2006-2008, 2011 Red Hat, Inc.
  * Copyright (C) 2006 Daniel P. Berrange
  *
  * This library is free software; you can redistribute it and/or
@@ -34,12 +34,12 @@ int nodeGetCPUStats(virConnectPtr conn ATTRIBUTE_UNUSED,
                     int cpuNum,
                     virNodeCPUStatsPtr params,
                     int *nparams,
-                    unsigned int flags ATTRIBUTE_UNUSED);
+                    unsigned int flags);
 int nodeGetMemoryStats(virConnectPtr conn ATTRIBUTE_UNUSED,
                        int cellNum,
                        virNodeMemoryStatsPtr params,
                        int *nparams,
-                       unsigned int flags ATTRIBUTE_UNUSED);
+                       unsigned int flags);
 int nodeGetCellsFreeMemory(virConnectPtr conn,
                            unsigned long long *freeMems,
                            int startCell,
diff --git a/src/nwfilter/nwfilter_driver.c b/src/nwfilter/nwfilter_driver.c
index bfe7f2f..a735059 100644
--- a/src/nwfilter/nwfilter_driver.c
+++ b/src/nwfilter/nwfilter_driver.c
@@ -272,8 +272,10 @@ cleanup:
 static virDrvOpenStatus
 nwfilterOpen(virConnectPtr conn,
              virConnectAuthPtr auth ATTRIBUTE_UNUSED,
-             unsigned int flags ATTRIBUTE_UNUSED)
+             unsigned int flags)
 {
+    virCheckFlags(VIR_CONNECT_RO, VIR_DRV_OPEN_ERROR);
+
     if (!driverState)
         return VIR_DRV_OPEN_DECLINED;

diff --git a/src/secret/secret_driver.c b/src/secret/secret_driver.c
index 552b7e4..c45ba51 100644
--- a/src/secret/secret_driver.c
+++ b/src/secret/secret_driver.c
@@ -525,7 +525,10 @@ cleanup:

 static virDrvOpenStatus
 secretOpen(virConnectPtr conn, virConnectAuthPtr auth ATTRIBUTE_UNUSED,
-           unsigned int flags ATTRIBUTE_UNUSED) {
+           unsigned int flags)
+{
+    virCheckFlags(VIR_CONNECT_RO, VIR_DRV_OPEN_ERROR);
+
     if (driverState == NULL)
         return VIR_DRV_OPEN_DECLINED;

@@ -667,7 +670,7 @@ cleanup:

 static virSecretPtr
 secretDefineXML(virConnectPtr conn, const char *xml,
-                unsigned int flags ATTRIBUTE_UNUSED)
+                unsigned int flags)
 {
     virSecretDriverStatePtr driver = conn->secretPrivateData;
     virSecretPtr ret = NULL;
@@ -675,6 +678,8 @@ secretDefineXML(virConnectPtr conn, const char *xml,
     virSecretDefPtr backup = NULL;
     virSecretDefPtr new_attrs;

+    virCheckFlags(0, NULL);
+
     new_attrs = virSecretDefParseString(xml);
     if (new_attrs == NULL)
         return NULL;
@@ -778,12 +783,14 @@ cleanup:
 }

 static char *
-secretGetXMLDesc(virSecretPtr obj, unsigned int flags ATTRIBUTE_UNUSED)
+secretGetXMLDesc(virSecretPtr obj, unsigned int flags)
 {
     virSecretDriverStatePtr driver = obj->conn->secretPrivateData;
     char *ret = NULL;
     virSecretEntryPtr secret;

+    virCheckFlags(0, NULL);
+
     secretDriverLock(driver);

     secret = secretFindByUUID(driver, obj->uuid);
@@ -805,7 +812,7 @@ cleanup:

 static int
 secretSetValue(virSecretPtr obj, const unsigned char *value,
-               size_t value_size, unsigned int flags ATTRIBUTE_UNUSED)
+               size_t value_size, unsigned int flags)
 {
     virSecretDriverStatePtr driver = obj->conn->secretPrivateData;
     int ret = -1;
@@ -813,6 +820,8 @@ secretSetValue(virSecretPtr obj, const unsigned char *value,
     size_t old_value_size;
     virSecretEntryPtr secret;

+    virCheckFlags(0, -1);
+
     if (VIR_ALLOC_N(new_value, value_size) < 0) {
         virReportOOMError();
         return -1;
diff --git a/src/util/command.c b/src/util/command.c
index eae58b2..6c19cd1 100644
--- a/src/util/command.c
+++ b/src/util/command.c
@@ -285,14 +285,14 @@ getDevNull(int *null)
  */
 static int
 virExecWithHook(const char *const*argv,
-          const char *const*envp,
-          const fd_set *keepfd,
-          pid_t *retpid,
-          int infd, int *outfd, int *errfd,
-          int flags,
-          virExecHook hook,
-          void *data,
-          char *pidfile)
+                const char *const*envp,
+                const fd_set *keepfd,
+                pid_t *retpid,
+                int infd, int *outfd, int *errfd,
+                unsigned int flags,
+                virExecHook hook,
+                void *data,
+                char *pidfile)
 {
     pid_t pid;
     int null = -1, i, openmax;
diff --git a/src/util/logging.c b/src/util/logging.c
index c86fcda..d340f57 100644
--- a/src/util/logging.c
+++ b/src/util/logging.c
@@ -481,10 +481,13 @@ static int virLogResetFilters(void) {
  * Returns -1 in case of failure or the filter number if successful
  */
 int virLogDefineFilter(const char *match, int priority,
-                       int flags ATTRIBUTE_UNUSED) {
+                       unsigned int flags)
+{
     int i;
     char *mdup = NULL;

+    virCheckFlags(0, -1);
+
     if ((match == NULL) || (priority < VIR_LOG_DEBUG) ||
         (priority > VIR_LOG_ERROR))
         return -1;
@@ -579,10 +582,13 @@ static int virLogResetOutputs(void) {
  */
 int virLogDefineOutput(virLogOutputFunc f, virLogCloseFunc c, void *data,
                        int priority, int dest, const char *name,
-                       int flags ATTRIBUTE_UNUSED) {
+                       unsigned int flags)
+{
     int ret = -1;
     char *ndup = NULL;

+    virCheckFlags(0, -1);
+
     if (f == NULL)
         return -1;

@@ -683,7 +689,8 @@ virLogVersionString(char **msg,
  * the message may be stored, sent to output or just discarded
  */
 void virLogMessage(const char *category, int priority, const char *funcname,
-                   long long linenr, int flags, const char *fmt, ...) {
+                   long long linenr, unsigned int flags, const char *fmt, ...)
+{
     static bool logVersionStderr = true;
     char *str = NULL;
     char *msg = NULL;
diff --git a/src/util/logging.h b/src/util/logging.h
index 6683e6f..20c8948 100644
--- a/src/util/logging.h
+++ b/src/util/logging.h
@@ -105,10 +105,11 @@ extern char *virLogGetOutputs(void);
 extern int virLogGetDefaultPriority(void);
 extern int virLogSetDefaultPriority(int priority);
 extern void virLogSetFromEnv(void);
-extern int virLogDefineFilter(const char *match, int priority, int flags);
+extern int virLogDefineFilter(const char *match, int priority,
+                              unsigned int flags);
 extern int virLogDefineOutput(virLogOutputFunc f, virLogCloseFunc c, void *data,
                               int priority, int dest, const char *name,
-                              int flags);
+                              unsigned int flags);

 /*
  * Internal logging API
@@ -123,7 +124,8 @@ extern int virLogParseDefaultPriority(const char *priority);
 extern int virLogParseFilters(const char *filters);
 extern int virLogParseOutputs(const char *output);
 extern void virLogMessage(const char *category, int priority,
-                          const char *funcname, long long linenr, int flags,
+                          const char *funcname, long long linenr,
+                          unsigned int flags,
                           const char *fmt, ...) ATTRIBUTE_FMT_PRINTF(6, 7);
 extern int virLogSetBufferSize(int size);
 extern void virLogEmergencyDumpAll(int signum);
-- 
1.7.4.4




More information about the libvir-list mailing list