]> git.ipfire.org Git - thirdparty/libvirt.git/commitdiff
Fix misc Win32 compile warnings
authorDaniel P. Berrange <berrange@redhat.com>
Thu, 23 Jul 2009 15:07:32 +0000 (16:07 +0100)
committerDaniel P. Berrange <berrange@redhat.com>
Thu, 23 Jul 2009 15:07:32 +0000 (16:07 +0100)
GCC >= 4.4 assumes the 'printf' attribute refers to the native
runtime libraries format specifiers. Thanks to gnulib, libvirt
has GNU format specifiers everywhere.  This means we need to
use 'gnu_printf' with GCC >= 4.4 to get correct compiler
checking of printf format specifiers.

* HACKING: Document new rules for ATTRIBUTE_FMT_PRINTF
* autobuild.sh, mingw32-libvirt.spec.in: Disable OpenNebula
  driver on mingw32 builds
* qemud/dispatch.h, qemud/qemu.h, src/buf.h src/internal.h,
  src/logging.h, src/security.h, src/sexpr.h, src/util.h,
  src/virterror_internal.h, src/xend_internal.c: Change
  over to ATTRIBUTE_FMT_PRINTF.
* src/virsh.c: Disable 'cd' and 'pwd' commands on Win32
  since they don't compile
* src/threads-win32.c: Add missing return value check

15 files changed:
HACKING
autobuild.sh
mingw32-libvirt.spec.in
qemud/dispatch.h
qemud/qemud.h
src/buf.h
src/internal.h
src/logging.h
src/security.h
src/sexpr.h
src/threads-win32.c
src/util.h
src/virsh.c
src/virterror_internal.h
src/xend_internal.c

diff --git a/HACKING b/HACKING
index ca39d61d85f2aaa3991f13a540772932208be7cd..da28e98bf0af86343a4c8d207377747f84ab5200 100644 (file)
--- a/HACKING
+++ b/HACKING
@@ -312,7 +312,7 @@ gcc's printf attribute directive in the prototype.  For example, here's
 the one for virAsprintf, in util.h:
 
     int virAsprintf(char **strp, const char *fmt, ...)
-       ATTRIBUTE_FORMAT(printf, 2, 3);
+       ATTRIBUTE_FMT_PRINTF(2, 3);
 
 This makes it so gcc's -Wformat and -Wformat-security options can do
 their jobs and cross-check format strings with the number and types
index 54abede3ddf4c627c74d4cba931636dda694f91b..d090e7498c6461905965c1a587634295969a73f5 100755 (executable)
@@ -76,6 +76,7 @@ if [ -x /usr/bin/i686-pc-mingw32-gcc ]; then
     --without-uml \
     --without-vbox \
     --without-openvz \
+    --without-one \
     --without-libvirtd
 
   make
index 271c6cad9aba9996030a1b17b76d9339da854587..951403232ebc220ce0f931d059169aea6e1e5d14 100644 (file)
@@ -52,6 +52,7 @@ MinGW Windows libvirt virtualization library.
   --without-uml \
   --without-vbox \
   --without-openvz \
+  --without-one \
   --without-libvirtd
 make
 
@@ -90,6 +91,7 @@ rm -rf $RPM_BUILD_ROOT
 %{_mingw32_datadir}/libvirt/schemas/storagevol.rng
 %{_mingw32_datadir}/libvirt/schemas/nodedev.rng
 %{_mingw32_datadir}/libvirt/schemas/capability.rng
+%{_mingw32_datadir}/libvirt/schemas/interface.rng
 
 %{_mingw32_datadir}/locale/*/LC_MESSAGES/libvirt.mo
 
index ab45b193b081ecad90478672d04b6447d7ecbd44..1d85df9a6b97742654084fe3e9b4932c55d1c5bb 100644 (file)
@@ -41,7 +41,7 @@ remoteDispatchClientRequest (struct qemud_server *server,
 
 void remoteDispatchFormatError (remote_error *rerr,
                                 const char *fmt, ...)
-    ATTRIBUTE_FORMAT(printf, 2, 3);
+    ATTRIBUTE_FMT_PRINTF(2, 3);
 
 void remoteDispatchAuthError (remote_error *rerr);
 void remoteDispatchGenericError (remote_error *rerr);
index abacbbbb69075d73aefaba19028d9cc1a5184adf..254db44809b6b122b86b29788df0f0fcc118b5e7 100644 (file)
 #ifdef HAVE_ANSIDECL_H
 #include <ansidecl.h>
 #endif
+
+#ifndef __GNUC_PREREQ
+#if defined __GNUC__ && defined __GNUC_MINOR__
+# define __GNUC_PREREQ(maj, min)                                        \
+    ((__GNUC__ << 16) + __GNUC_MINOR__ >= ((maj) << 16) + (min))
+#else
+#define __GNUC_PREREQ(maj,min) 0
+#endif
+#endif
+
+/**
+ * ATTRIBUTE_UNUSED:
+ *
+ * Macro to flag conciously unused parameters to functions
+ */
 #ifndef ATTRIBUTE_UNUSED
 #define ATTRIBUTE_UNUSED __attribute__((__unused__))
 #endif
-#ifndef ATTRIBUTE_FORMAT
-#define ATTRIBUTE_FORMAT(args...) __attribute__((__format__ (args)))
+
+/**
+ * ATTRIBUTE_FMT_PRINTF
+ *
+ * Macro used to check printf like functions, if compiling
+ * with gcc.
+ *
+ * We use gnulib which guarentees we always have GNU style
+ * printf format specifiers even on broken Win32 platforms
+ * hence we have to force 'gnu_printf' for new GCC
+ */
+#ifndef ATTRIBUTE_FMT_PRINTF
+#if __GNUC_PREREQ (4, 4)
+#define ATTRIBUTE_FMT_PRINTF(fmtpos,argpos) __attribute__((__format__ (gnu_printf, fmtpos,argpos)))
+#else
+#define ATTRIBUTE_FMT_PRINTF(fmtpos,argpos) __attribute__((__format__ (printf, fmtpos,argpos)))
+#endif
 #endif
+
+#ifndef ATTRIBUTE_RETURN_CHECK
+#if __GNUC_PREREQ (3, 4)
+#define ATTRIBUTE_RETURN_CHECK __attribute__((__warn_unused_result__))
 #else
+#define ATTRIBUTE_RETURN_CHECK
+#endif
+#endif
+
+#else
+#ifndef ATTRIBUTE_UNUSED
 #define ATTRIBUTE_UNUSED
-#define ATTRIBUTE_FORMAT(...)
+#endif
+#ifndef ATTRIBUTE_FMT_PRINTF
+#define ATTRIBUTE_FMT_PRINTF(...)
+#endif
+#ifndef ATTRIBUTE_RETURN_CHECK
+#define ATTRIBUTE_RETURN_CHECK
+#endif
 #endif
 
 #define qemudDebug DEBUG
@@ -213,7 +259,7 @@ struct qemud_server {
 };
 
 void qemudLog(int priority, const char *fmt, ...)
-    ATTRIBUTE_FORMAT(printf,2,3);
+    ATTRIBUTE_FMT_PRINTF(2,3);
 
 
 
index 0b78d170555ed53bffebd9beb3c6d5883f5b50fd..7d31cb2ac23d6a3213eb835e9c942aa060e4cb1b 100644 (file)
--- a/src/buf.h
+++ b/src/buf.h
@@ -40,7 +40,7 @@ unsigned int virBufferUse(const virBufferPtr buf);
 void virBufferAdd(const virBufferPtr buf, const char *str, int len);
 void virBufferAddChar(const virBufferPtr buf, char c);
 void virBufferVSprintf(const virBufferPtr buf, const char *format, ...)
-  ATTRIBUTE_FORMAT(printf, 2, 3);
+  ATTRIBUTE_FMT_PRINTF(2, 3);
 void virBufferStrcat(const virBufferPtr buf, ...);
 void virBufferEscapeString(const virBufferPtr buf, const char *format, const char *str);
 void virBufferURIEncodeString (const virBufferPtr buf, const char *str);
index adb65076ea301969960b016f503be87cb341232c..cf7e1967131e0612da66d324e1667f3e2d96196a 100644 (file)
 #ifdef __GNUC__
 
 #ifndef __GNUC_PREREQ
+#if defined __GNUC__ && defined __GNUC_MINOR__
+# define __GNUC_PREREQ(maj, min)                                        \
+    ((__GNUC__ << 16) + __GNUC_MINOR__ >= ((maj) << 16) + (min))
+#else
 #define __GNUC_PREREQ(maj,min) 0
 #endif
+#endif
 
 /**
  * ATTRIBUTE_UNUSED:
 #endif
 
 /**
- * ATTRIBUTE_FORMAT
+ * ATTRIBUTE_FMT_PRINTF
  *
- * Macro used to check printf/scanf-like functions, if compiling
+ * Macro used to check printf like functions, if compiling
  * with gcc.
+ *
+ * We use gnulib which guarentees we always have GNU style
+ * printf format specifiers even on broken Win32 platforms
+ * hence we have to force 'gnu_printf' for new GCC
  */
-#ifndef ATTRIBUTE_FORMAT
-#define ATTRIBUTE_FORMAT(args...) __attribute__((__format__ (args)))
+#ifndef ATTRIBUTE_FMT_PRINTF
+#if __GNUC_PREREQ (4, 4)
+#define ATTRIBUTE_FMT_PRINTF(fmtpos,argpos) __attribute__((__format__ (gnu_printf, fmtpos,argpos)))
+#else
+#define ATTRIBUTE_FMT_PRINTF(fmtpos,argpos) __attribute__((__format__ (printf, fmtpos,argpos)))
+#endif
 #endif
 
 #ifndef ATTRIBUTE_RETURN_CHECK
 #endif
 
 #else
+#ifndef ATTRIBUTE_UNUSED
 #define ATTRIBUTE_UNUSED
-#define ATTRIBUTE_FORMAT(...)
+#endif
+#ifndef ATTRIBUTE_FMT_PRINTF
+#define ATTRIBUTE_FMT_PRINTF(...)
+#endif
+#ifndef ATTRIBUTE_RETURN_CHECK
 #define ATTRIBUTE_RETURN_CHECK
+#endif
 #endif                         /* __GNUC__ */
 
 /*
index 0b9ae793b285e24df6974031aaf8ca3186ae36c3..f1e252598f94e3960f780346fc7473902b150a65 100644 (file)
@@ -121,6 +121,6 @@ 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 *fmt, ...) ATTRIBUTE_FORMAT(printf, 6, 7);
+                          const char *fmt, ...) ATTRIBUTE_FMT_PRINTF(6, 7);
 
 #endif
index 585caa04c64fff64b75a2d94d6aa8c6326a82518..5fc308665cf556112569892baf1f7e1a6b3fba4c 100644 (file)
@@ -82,7 +82,7 @@ virSecurityDriverVerify(virConnectPtr conn, virDomainDefPtr def);
 
 void
 virSecurityReportError(virConnectPtr conn, int code, const char *fmt, ...)
-    ATTRIBUTE_FORMAT(printf, 3, 4);
+    ATTRIBUTE_FMT_PRINTF(3, 4);
 
 /* Helpers */
 void virSecurityDriverInit(virSecurityDriverPtr drv);
index c3d038e4cadbc74534368672c064813db4497bf5..1d9adaa5927bf4a3c4f1a97d8f970d54fb052808 100644 (file)
@@ -49,7 +49,7 @@ void sexpr_free(struct sexpr *sexpr);
 const char *sexpr_node(const struct sexpr *sexpr, const char *node);
 int sexpr_node_copy(const struct sexpr *sexpr, const char *node, char **dst);
 const char *sexpr_fmt_node(const struct sexpr *sexpr, const char *fmt, ...)
-  ATTRIBUTE_FORMAT(printf,2,3);
+  ATTRIBUTE_FMT_PRINTF(2,3);
 struct sexpr *sexpr_lookup(const struct sexpr *sexpr, const char *node);
 int sexpr_has(const struct sexpr *sexpr, const char *node);
 #endif
index 10233b033d7d7def04f543f09e40db414adfebde..ef3f2ef2c0c233623e567048167b4c5df4e96a14 100644 (file)
@@ -41,8 +41,10 @@ void virCondEventCleanup(void *data);
 
 int virThreadInitialize(void)
 {
-    virMutexInit(&virThreadLocalLock);
-    virThreadLocalInit(&virCondEvent, virCondEventCleanup);
+    if (virMutexInit(&virThreadLocalLock) < 0)
+        return -1;
+    if (virThreadLocalInit(&virCondEvent, virCondEventCleanup) < 0)
+        return -1;
 
     return 0;
 }
index 1a7286cd660baf60681e97bc78f1294fa478c57c..43a5bbc219857d6c8be89d710295e21f9f0593aa 100644 (file)
@@ -160,7 +160,7 @@ int virMacAddrCompare (const char *mac1, const char *mac2);
 void virSkipSpaces(const char **str);
 int virParseNumber(const char **str);
 int virAsprintf(char **strp, const char *fmt, ...)
-    ATTRIBUTE_FORMAT(printf, 2, 3);
+    ATTRIBUTE_FMT_PRINTF(2, 3);
 
 #define VIR_MAC_BUFLEN 6
 #define VIR_MAC_PREFIX_BUFLEN 3
index fff73a1286c00556fa76c6e06ebd423926eb331c..69192929725dec41da10df64ec5108f7837517b8 100644 (file)
@@ -202,7 +202,7 @@ typedef struct __vshControl {
 static const vshCmdDef commands[];
 
 static void vshError(vshControl *ctl, int doexit, const char *format, ...)
-    ATTRIBUTE_FORMAT(printf, 3, 4);
+    ATTRIBUTE_FMT_PRINTF(3, 4);
 static int vshInit(vshControl *ctl);
 static int vshDeinit(vshControl *ctl);
 static void vshUsage(void);
@@ -272,9 +272,9 @@ static virStorageVolPtr vshCommandOptVolBy(vshControl *ctl, const vshCmd *cmd,
                            VSH_BYUUID|VSH_BYNAME)
 
 static void vshPrintExtra(vshControl *ctl, const char *format, ...)
-    ATTRIBUTE_FORMAT(printf, 2, 3);
+    ATTRIBUTE_FMT_PRINTF(2, 3);
 static void vshDebug(vshControl *ctl, int level, const char *format, ...)
-    ATTRIBUTE_FORMAT(printf, 3, 4);
+    ATTRIBUTE_FMT_PRINTF(3, 4);
 
 /* XXX: add batch support */
 #define vshPrint(_ctl, ...)   fprintf(stdout, __VA_ARGS__)
@@ -495,6 +495,8 @@ cmdConnect(vshControl *ctl, const vshCmd *cmd)
     return ctl->conn ? TRUE : FALSE;
 }
 
+#ifndef WIN32
+
 /*
  * "console" command
  */
@@ -510,8 +512,6 @@ static const vshCmdOptDef opts_console[] = {
     {NULL, 0, 0, NULL}
 };
 
-#ifndef __MINGW32__
-
 static int
 cmdRunConsole(vshControl *ctl, virDomainPtr dom)
 {
@@ -574,17 +574,6 @@ cmdRunConsole(vshControl *ctl, virDomainPtr dom)
     return ret;
 }
 
-#else /* __MINGW32__ */
-
-static int
-cmdRunConsole(vshControl *ctl, virDomainPtr dom ATTRIBUTE_UNUSED)
-{
-    vshError (ctl, FALSE, "%s", _("console not implemented on this platform"));
-    return FALSE;
-}
-
-#endif /* __MINGW32__ */
-
 static int
 cmdConsole(vshControl *ctl, const vshCmd *cmd)
 {
@@ -603,6 +592,9 @@ cmdConsole(vshControl *ctl, const vshCmd *cmd)
     return ret;
 }
 
+#endif /* WIN32 */
+
+
 /*
  * "list" command
  */
@@ -931,7 +923,9 @@ static const vshCmdInfo info_create[] = {
 
 static const vshCmdOptDef opts_create[] = {
     {"file", VSH_OT_DATA, VSH_OFLAG_REQ, gettext_noop("file containing an XML domain description")},
+#ifndef WIN32
     {"console", VSH_OT_BOOL, 0, gettext_noop("attach to console after creation")},
+#endif
     {NULL, 0, 0, NULL}
 };
 
@@ -943,7 +937,9 @@ cmdCreate(vshControl *ctl, const vshCmd *cmd)
     int found;
     int ret = TRUE;
     char *buffer;
+#ifndef WIN32
     int console = vshCommandOptBool(cmd, "console");
+#endif
 
     if (!vshConnectionUsability(ctl, ctl->conn, TRUE))
         return FALSE;
@@ -961,8 +957,10 @@ cmdCreate(vshControl *ctl, const vshCmd *cmd)
     if (dom != NULL) {
         vshPrint(ctl, _("Domain %s created from %s\n"),
                  virDomainGetName(dom), from);
+#ifndef WIN32
         if (console)
             cmdRunConsole(ctl, dom);
+#endif
         virDomainFree(dom);
     } else {
         vshError(ctl, FALSE, _("Failed to create domain from %s"), from);
@@ -1083,7 +1081,9 @@ static const vshCmdInfo info_start[] = {
 
 static const vshCmdOptDef opts_start[] = {
     {"domain", VSH_OT_DATA, VSH_OFLAG_REQ, gettext_noop("name of the inactive domain")},
+#ifndef WIN32
     {"console", VSH_OT_BOOL, 0, gettext_noop("attach to console after creation")},
+#endif
     {NULL, 0, 0, NULL}
 };
 
@@ -1092,7 +1092,9 @@ cmdStart(vshControl *ctl, const vshCmd *cmd)
 {
     virDomainPtr dom;
     int ret = TRUE;
+#ifndef WIN32
     int console = vshCommandOptBool(cmd, "console");
+#endif
 
     if (!vshConnectionUsability(ctl, ctl->conn, TRUE))
         return FALSE;
@@ -1109,8 +1111,10 @@ cmdStart(vshControl *ctl, const vshCmd *cmd)
     if (virDomainCreate(dom) == 0) {
         vshPrint(ctl, _("Domain %s started\n"),
                  virDomainGetName(dom));
+#ifndef WIN32
         if (console)
             cmdRunConsole(ctl, dom);
+#endif
     } else {
         vshError(ctl, FALSE, _("Failed to start domain %s"),
                  virDomainGetName(dom));
@@ -6562,6 +6566,8 @@ editReadBackFile (vshControl *ctl, const char *filename)
     return ret;
 }
 
+
+#ifndef WIN32
 /*
  * "cd" command
  */
@@ -6603,6 +6609,9 @@ cmdCd(vshControl *ctl, const vshCmd *cmd ATTRIBUTE_UNUSED)
     return 0;
 }
 
+#endif
+
+#ifndef WIN32
 /*
  * "pwd" command
  */
@@ -6638,6 +6647,7 @@ cmdPwd(vshControl *ctl, const vshCmd *cmd ATTRIBUTE_UNUSED)
     free (cwd);
     return !err;
 }
+#endif
 
 /*
  * "edit" command
@@ -6802,9 +6812,13 @@ static const vshCmdDef commands[] = {
     {"attach-interface", cmdAttachInterface, opts_attach_interface, info_attach_interface},
     {"autostart", cmdAutostart, opts_autostart, info_autostart},
     {"capabilities", cmdCapabilities, NULL, info_capabilities},
+#ifndef WIN32
     {"cd", cmdCd, opts_cd, info_cd},
+#endif
     {"connect", cmdConnect, opts_connect, info_connect},
+#ifndef WIN32
     {"console", cmdConsole, opts_console, info_console},
+#endif
     {"create", cmdCreate, opts_create, info_create},
     {"start", cmdStart, opts_start, info_start},
     {"destroy", cmdDestroy, opts_destroy, info_destroy},
@@ -6882,7 +6896,9 @@ static const vshCmdDef commands[] = {
     {"pool-undefine", cmdPoolUndefine, opts_pool_undefine, info_pool_undefine},
     {"pool-uuid", cmdPoolUuid, opts_pool_uuid, info_pool_uuid},
 
+#ifndef WIN32
     {"pwd", cmdPwd, NULL, info_pwd},
+#endif
     {"quit", cmdQuit, NULL, info_quit},
     {"reboot", cmdReboot, opts_reboot, info_reboot},
     {"restore", cmdRestore, opts_restore, info_restore},
index fe9a96fe04ba8a8a8a9d1c6bce7604d5500a9840..da89de753f4ec4319da7f88a623ec10b72323786 100644 (file)
@@ -46,7 +46,7 @@ void virRaiseErrorFull(virConnectPtr conn,
                        int int1,
                        int int2,
                        const char *fmt, ...)
-    ATTRIBUTE_FORMAT(printf, 13, 14);
+    ATTRIBUTE_FMT_PRINTF(13, 14);
 
 /* Includes 'dom' and 'net' for compatbility, but they're ignored */
 #define virRaiseError(conn, dom, net, domain, code, level,              \
@@ -61,7 +61,7 @@ void virReportErrorHelper(virConnectPtr conn, int domcode, int errcode,
                           const char *funcname ATTRIBUTE_UNUSED,
                           size_t linenr ATTRIBUTE_UNUSED,
                           const char *fmt, ...)
-  ATTRIBUTE_FORMAT(printf, 7, 8);
+  ATTRIBUTE_FMT_PRINTF(7, 8);
 
 void virReportSystemErrorFull(virConnectPtr conn,
                               int domcode,
@@ -70,7 +70,7 @@ void virReportSystemErrorFull(virConnectPtr conn,
                               const char *funcname,
                               size_t linenr,
                               const char *fmt, ...)
-    ATTRIBUTE_FORMAT(printf, 7, 8);
+    ATTRIBUTE_FMT_PRINTF(7, 8);
 
 #define virReportSystemError(conn, theerrno, fmt,...)             \
     virReportSystemErrorFull((conn),                              \
index 55ffd3f9a5004e681c8ffb2279d27965eb42e956..e23ae2bca5ec25fa92e236bc6634bec76f58b61a 100644 (file)
@@ -582,7 +582,7 @@ xend_op(virConnectPtr xend, const char *name, const char *key, ...)
  * Returns a parsed S-Expression in case of success, NULL in case of failure
  */
 static struct sexpr *sexpr_get(virConnectPtr xend, const char *fmt, ...)
-  ATTRIBUTE_FORMAT(printf,2,3);
+  ATTRIBUTE_FMT_PRINTF(2,3);
 
 static struct sexpr *
 sexpr_get(virConnectPtr xend, const char *fmt, ...)