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

Re: [libvirt] [PATCH] Fix build --without-network



On Mon, Apr 27, 2015 at 03:49:35PM +0200, Martin Kletzander wrote:
In order not to bring in any link dependencies, bridge driver doesn't
use the usual stubs as other conditionally-built code does.  However,
having the function as a macro imposes a problem with possibly unused
variables if just defined as "0".  This was worked around by using
(dom=dom, iface=iface, 0) which should act like a 0 if used in a
condition.  However, gcc still bugs about that, so I came up with
another way how to fix that.

Using static inline functions in the header won't collide with anything,
it fixes the bug and does one thing that the macro didn't do.  It checks
whenther passed variables are pointers of compatible type.  It has only
one downside, and that is that we need to either a) define it with
ATTRIBUTE_UNUSED, which needs an exception in cfg.mk or b) do something
like ignore_value(variable); in the function body.  I went with the
first variant.

Signed-off-by: Martin Kletzander <mkletzan redhat com>
---

Notes:
   I can go with the version (b) if that's the preferred one.


Ping, should I send the second variant instead?  Or change the whole
build to compile it unconditionally with stubs added?

cfg.mk                      |  4 ++--
src/network/bridge_driver.h | 19 ++++++++++++++++---
2 files changed, 18 insertions(+), 5 deletions(-)

diff --git a/cfg.mk b/cfg.mk
index 9ba2134..796ed80 100644
--- a/cfg.mk
+++ b/cfg.mk
@@ -1,5 +1,5 @@
# Customize Makefile.maint.                           -*- makefile -*-
-# Copyright (C) 2008-2014 Red Hat, Inc.
+# Copyright (C) 2008-2015 Red Hat, Inc.
# Copyright (C) 2003-2008 Free Software Foundation, Inc.

# This program is free software: you can redistribute it and/or modify
@@ -1184,7 +1184,7 @@ exclude_file_name_regexp--sc_prohibit_getenv = \
  ^tests/.*\.[ch]$$

exclude_file_name_regexp--sc_avoid_attribute_unused_in_header = \
-  ^src/util/virlog\.h$$
+  ^(src/util/virlog\.h|src/network/bridge_driver\.h)$$

exclude_file_name_regexp--sc_prohibit_mixed_case_abbreviations = \
  ^src/(vbox/vbox_CAPI.*.h|esx/esx_vi.(c|h)|esx/esx_storage_backend_iscsi.c)$$
diff --git a/src/network/bridge_driver.h b/src/network/bridge_driver.h
index 2f801ee..513ccf7 100644
--- a/src/network/bridge_driver.h
+++ b/src/network/bridge_driver.h
@@ -1,7 +1,7 @@
/*
 * bridge_driver.h: core driver methods for managing networks
 *
- * Copyright (C) 2006-2013 Red Hat, Inc.
+ * Copyright (C) 2006-2015 Red Hat, Inc.
 * Copyright (C) 2006 Daniel P. Berrange
 *
 * This library is free software; you can redistribute it and/or
@@ -55,11 +55,24 @@ int networkDnsmasqConfContents(virNetworkObjPtr network,
# else
/* Define no-op replacements that don't drag in any link dependencies.  */
#  define networkAllocateActualDevice(dom, iface) 0
-#  define networkNotifyActualDevice(dom, iface) (dom=dom, iface=iface, 0)
-#  define networkReleaseActualDevice(dom, iface) (dom=dom, iface=iface, 0)
#  define networkGetNetworkAddress(netname, netaddr) (-2)
#  define networkDnsmasqConfContents(network, pidfile, configstr, \
                    dctx, caps) 0
+
+static inline int
+networkNotifyActualDevice(virDomainDefPtr dom ATTRIBUTE_UNUSED,
+                          virDomainNetDefPtr iface ATTRIBUTE_UNUSED)
+{
+    return 0;
+}
+
+static inline int
+networkReleaseActualDevice(virDomainDefPtr dom ATTRIBUTE_UNUSED,
+                          virDomainNetDefPtr iface ATTRIBUTE_UNUSED)
+{
+    return 0;
+}
+
# endif

typedef char *(*networkDnsmasqLeaseFileNameFunc)(const char *netname);
--
2.3.6

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

Attachment: signature.asc
Description: PGP signature


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