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

[Libvir] [PATCH] Check calls to printf-like functions (and some fixes)



* Check calls to printf-like functions (and some fixes)
* Fix qemudDebug when debug not enabled
* Fix TODO so it doesn't supply a semi-colon (and all calls to this macro)
* Add vim/emacs local variables in several places

AFAICS this doesn't break the Python API build script, which was the objection to Jim Meyerling's previous patch to do much the same (http://www.redhat.com/archives/libvir-list/2006-March/msg00065.html).

Rich.
diff -urN --exclude=CVS --exclude=.git --exclude='*.pem' --exclude=demoCA --exclude=.gitignore --exclude='*.orig' --exclude='*.bak' libvirt-cvs/qemud/conf.c libvirt-printf/qemud/conf.c
--- libvirt-cvs/qemud/conf.c	2007-03-12 10:39:24.000000000 +0000
+++ libvirt-printf/qemud/conf.c	2007-03-12 16:55:06.000000000 +0000
@@ -1408,14 +1408,14 @@
     towrite = strlen(xml);
     if (write(fd, xml, towrite) != towrite) {
         qemudReportError(server, VIR_ERR_INTERNAL_ERROR,
-                         "cannot write config file %s",
+                         "cannot write config file %s: %s",
                          network->configFile, strerror(errno));
         goto cleanup;
     }
 
     if (close(fd) < 0) {
         qemudReportError(server, VIR_ERR_INTERNAL_ERROR,
-                         "cannot save config file %s",
+                         "cannot save config file %s: %s",
                          network->configFile, strerror(errno));
         goto cleanup;
     }
diff -urN --exclude=CVS --exclude=.git --exclude='*.pem' --exclude=demoCA --exclude=.gitignore --exclude='*.orig' --exclude='*.bak' libvirt-cvs/qemud/driver.h libvirt-printf/qemud/driver.h
--- libvirt-cvs/qemud/driver.h	2007-03-12 10:39:26.000000000 +0000
+++ libvirt-printf/qemud/driver.h	2007-03-12 16:43:36.000000000 +0000
@@ -28,7 +28,8 @@
 #include "internal.h"
 
 void qemudReportError(struct qemud_server *server,
-                      int code, const char *fmt, ...);
+                      int code, const char *fmt, ...)
+    ATTRIBUTE_FORMAT(printf,3,4);
 
 int qemudGetCPUInfo(unsigned int *cpus, unsigned int *mhz,
                     unsigned int *nodes, unsigned int *sockets,
diff -urN --exclude=CVS --exclude=.git --exclude='*.pem' --exclude=demoCA --exclude=.gitignore --exclude='*.orig' --exclude='*.bak' libvirt-cvs/qemud/internal.h libvirt-printf/qemud/internal.h
--- libvirt-cvs/qemud/internal.h	2007-03-12 10:39:26.000000000 +0000
+++ libvirt-printf/qemud/internal.h	2007-03-12 16:47:26.000000000 +0000
@@ -37,10 +37,14 @@
 #include <ansidecl.h>
 #endif
 #ifndef ATTRIBUTE_UNUSED
-#define ATTRIBUTE_UNUSED __attribute__((unused))
+#define ATTRIBUTE_UNUSED __attribute__((__unused__))
+#endif
+#ifndef ATTRIBUTE_FORMAT
+#define ATTRIBUTE_FORMAT(args...) __attribute__((__format__ (args)))
 #endif
 #else
 #define ATTRIBUTE_UNUSED
+#define ATTRIBUTE_FORMAT(...)
 #endif
 
 #define UUID_LEN 16
@@ -333,12 +337,13 @@
 int qemudShutdownNetworkDaemon(struct qemud_server *server,
                                struct qemud_network *network);
 
-void qemudLog(int priority, const char *fmt, ...);
+void qemudLog(int priority, const char *fmt, ...)
+    ATTRIBUTE_FORMAT(printf,2,3);
 
 #ifdef ENABLE_DEBUG
 #define qemudDebug(...) qemudLog(QEMUD_DEBUG, __VA_ARGS__)
 #else
-#define qemudDebug(fmt, ...) do { } while(0);
+#define qemudDebug(fmt, ...)
 #endif
 
 static inline int
diff -urN --exclude=CVS --exclude=.git --exclude='*.pem' --exclude=demoCA --exclude=.gitignore --exclude='*.orig' --exclude='*.bak' libvirt-cvs/src/internal.h libvirt-printf/src/internal.h
--- libvirt-cvs/src/internal.h	2007-03-12 10:40:32.000000000 +0000
+++ libvirt-printf/src/internal.h	2007-03-12 17:02:39.000000000 +0000
@@ -26,33 +26,33 @@
 #define _N(str) dgettext(GETTEXT_PACKAGE, (str))
 #define gettext_noop(str) (str)
 
+#ifdef __GNUC__
+#ifdef HAVE_ANSIDECL_H
+#include <ansidecl.h>
+#endif
+
 /**
  * ATTRIBUTE_UNUSED:
  *
  * Macro to flag conciously unused parameters to functions
  */
-#ifdef __GNUC__
-#ifdef HAVE_ANSIDECL_H
-#include <ansidecl.h>
-#endif
 #ifndef ATTRIBUTE_UNUSED
-#define ATTRIBUTE_UNUSED __attribute__((unused))
+#define ATTRIBUTE_UNUSED __attribute__((__unused__))
 #endif
-#else
-#define ATTRIBUTE_UNUSED
+
+/**
+ * ATTRIBUTE_FORMAT
+ *
+ * Macro used to check printf/scanf-like functions, if compiling
+ * with gcc.
+ */
+#ifndef ATTRIBUTE_FORMAT
+#define ATTRIBUTE_FORMAT(args...) __attribute__((__format__ (args)))
 #endif
 
-#ifndef __attribute__
-/* This feature is available in gcc versions 2.5 and later.  */
-# if __GNUC__ < 2 || (__GNUC__ == 2 && __GNUC_MINOR__ < 5)
-#  define __attribute__(Spec) /* empty */
-# endif
-/* The __-protected variants of `format' and `printf' attributes
-   are accepted by gcc versions 2.6.4 (effectively 2.7) and later.  */
-# if __GNUC__ < 2 || (__GNUC__ == 2 && __GNUC_MINOR__ < 7)
-#  define __format__ format
-#  define __printf__ printf
-# endif
+#else
+#define ATTRIBUTE_UNUSED
+#define ATTRIBUTE_FORMAT(...)
 #endif
 
 /**
@@ -62,7 +62,7 @@
  */
 #define TODO 								\
     fprintf(stderr, "Unimplemented block at %s:%d\n",			\
-            __FILE__, __LINE__);
+            __FILE__, __LINE__)
 
 /**
  * VIR_CONNECT_MAGIC:
@@ -211,7 +211,8 @@
 		     const char *str1,
 		     const char *str2,
 		     const char *str3,
-		     int int1, int int2, const char *msg, ...);
+		     int int1, int int2, const char *msg, ...)
+  ATTRIBUTE_FORMAT(printf, 12, 13);
 const char *__virErrorMsg(virErrorNumber error, const char *info);
 
 /************************************************************************
diff -urN --exclude=CVS --exclude=.git --exclude='*.pem' --exclude=demoCA --exclude=.gitignore --exclude='*.orig' --exclude='*.bak' libvirt-cvs/src/libvirt.c libvirt-printf/src/libvirt.c
--- libvirt-cvs/src/libvirt.c	2007-03-12 10:40:26.000000000 +0000
+++ libvirt-printf/src/libvirt.c	2007-03-12 17:07:43.000000000 +0000
@@ -1495,7 +1495,7 @@
     virConnectPtr conn;
 
     if (domain == NULL) {
-        TODO
+        TODO;
 	return (-1);
     }
     if (!VIR_IS_CONNECTED_DOMAIN(domain)) {
@@ -1549,8 +1549,8 @@
     virConnectPtr conn;
 
     if (domain == NULL) {
-        TODO
-	return (-1);
+        TODO;
+        return (-1);
     }
     if (!VIR_IS_CONNECTED_DOMAIN(domain)) {
         virLibDomainError(domain, VIR_ERR_INVALID_DOMAIN, __FUNCTION__);
@@ -1868,8 +1868,8 @@
     int i, ret = -1;
     virConnectPtr conn;
     if (domain == NULL) {
-        TODO
-	return (-1);
+        TODO;
+        return (-1);
     }
     if (!VIR_IS_CONNECTED_DOMAIN(domain)) {
         virLibDomainError(domain, VIR_ERR_INVALID_DOMAIN, __FUNCTION__);
@@ -1975,8 +1975,8 @@
     virConnectPtr conn;
 
     if (domain == NULL) {
-        TODO
-	return (-1);
+        TODO;
+        return (-1);
     }
     if (!VIR_IS_CONNECTED_DOMAIN(domain)) {
         virLibDomainError(domain, VIR_ERR_INVALID_DOMAIN, __FUNCTION__);
@@ -2044,8 +2044,8 @@
     virConnectPtr conn;
 
     if (domain == NULL) {
-        TODO
-	return (-1);
+        TODO;
+        return (-1);
     }
     if (!VIR_IS_CONNECTED_DOMAIN(domain)) {
         virLibDomainError(domain, VIR_ERR_INVALID_DOMAIN, __FUNCTION__);
@@ -2107,8 +2107,8 @@
     virConnectPtr conn;
 
     if (domain == NULL) {
-        TODO
-	return (-1);
+        TODO;
+        return (-1);
     }
     if (!VIR_IS_CONNECTED_DOMAIN(domain)) {
         virLibDomainError(domain, VIR_ERR_INVALID_DOMAIN, __FUNCTION__);
@@ -2654,8 +2654,8 @@
     int i, ret = -1;
     virConnectPtr conn;
     if (network == NULL) {
-        TODO
-	return (-1);
+        TODO;
+        return (-1);
     }
     if (!VIR_IS_CONNECTED_NETWORK(network)) {
         virLibNetworkError(network, VIR_ERR_INVALID_NETWORK, __FUNCTION__);
@@ -2961,3 +2961,17 @@
     virLibConnError(network->conn, VIR_ERR_CALL_FAILED, __FUNCTION__);
     return (-1);
 }
+
+/*
+ * vim: set tabstop=4:
+ * vim: set shiftwidth=4:
+ * vim: set expandtab:
+ */
+/*
+ * Local variables:
+ *  indent-tabs-mode: nil
+ *  c-indent-level: 4
+ *  c-basic-offset: 4
+ *  tab-width: 4
+ * End:
+ */
diff -urN --exclude=CVS --exclude=.git --exclude='*.pem' --exclude=demoCA --exclude=.gitignore --exclude='*.orig' --exclude='*.bak' libvirt-cvs/src/proxy_internal.c libvirt-printf/src/proxy_internal.c
--- libvirt-cvs/src/proxy_internal.c	2007-03-12 10:40:33.000000000 +0000
+++ libvirt-printf/src/proxy_internal.c	2007-03-12 17:08:24.000000000 +0000
@@ -475,8 +475,8 @@
 	return(-1);
     }
     if (res->serial != serial) {
-        TODO /* Asynchronous communication */
-	fprintf(stderr, _("got asynchronous packet number %d\n"), res->serial);
+        TODO; /* Asynchronous communication */
+        fprintf(stderr, _("got asynchronous packet number %d\n"), res->serial);
         goto retry;
     }
     return(0);
@@ -1044,3 +1044,17 @@
 
     return(ostype);
 }
+
+/*
+ * vim: set tabstop=4:
+ * vim: set shiftwidth=4:
+ * vim: set expandtab:
+ */
+/*
+ * Local variables:
+ *  indent-tabs-mode: nil
+ *  c-indent-level: 4
+ *  c-basic-offset: 4
+ *  tab-width: 4
+ * End:
+ */
diff -urN --exclude=CVS --exclude=.git --exclude='*.pem' --exclude=demoCA --exclude=.gitignore --exclude='*.orig' --exclude='*.bak' libvirt-cvs/src/sexpr.h libvirt-printf/src/sexpr.h
--- libvirt-cvs/src/sexpr.h	2007-03-12 10:40:32.000000000 +0000
+++ libvirt-printf/src/sexpr.h	2007-03-12 16:52:54.000000000 +0000
@@ -13,6 +13,8 @@
 #ifndef _LIBVIR_SEXPR_H_
 #define _LIBVIR_SEXPR_H_
 
+#include "internal.h"
+
 #include <sys/types.h>
 
 enum sexpr_type {
@@ -45,6 +47,7 @@
 
 /* lookup in S-Expressions */
 const char *sexpr_node(struct sexpr *sexpr, const char *node);
-const char *sexpr_fmt_node(struct sexpr *sexpr, const char *fmt, ...);
+const char *sexpr_fmt_node(struct sexpr *sexpr, const char *fmt, ...)
+  ATTRIBUTE_FORMAT(printf,2,3);
 struct sexpr *sexpr_lookup(struct sexpr *sexpr, const char *node);
 #endif
diff -urN --exclude=CVS --exclude=.git --exclude='*.pem' --exclude=demoCA --exclude=.gitignore --exclude='*.orig' --exclude='*.bak' libvirt-cvs/src/test.c libvirt-printf/src/test.c
--- libvirt-cvs/src/test.c	2007-03-12 10:40:24.000000000 +0000
+++ libvirt-printf/src/test.c	2007-03-12 16:48:04.000000000 +0000
@@ -1263,7 +1263,7 @@
                       uuid[8], uuid[9], uuid[10], uuid[11],
                       uuid[12], uuid[13], uuid[14], uuid[15]);
 
-    virBufferVSprintf(buf, "  <memory>%d</memory>\n", con->domains[domidx].info.maxMem);
+    virBufferVSprintf(buf, "  <memory>%lu</memory>\n", con->domains[domidx].info.maxMem);
     virBufferVSprintf(buf, "  <vcpu>%d</vcpu>\n", con->domains[domidx].info.nrVirtCpu);
     virBufferVSprintf(buf, "  <on_reboot>%s</on_reboot>\n", testRestartFlagToString(con->domains[domidx].onReboot));
     virBufferVSprintf(buf, "  <on_poweroff>%s</on_poweroff>\n", testRestartFlagToString(con->domains[domidx].onPoweroff));
diff -urN --exclude=CVS --exclude=.git --exclude='*.pem' --exclude=demoCA --exclude=.gitignore --exclude='*.orig' --exclude='*.bak' libvirt-cvs/src/xm_internal.c libvirt-printf/src/xm_internal.c
--- libvirt-cvs/src/xm_internal.c	2007-03-12 10:40:31.000000000 +0000
+++ libvirt-printf/src/xm_internal.c	2007-03-12 16:53:19.000000000 +0000
@@ -950,7 +950,7 @@
 
     if (vnc) {
         virBufferVSprintf(buf,
-                          "    <graphics type='vnc' port='%d'",
+                          "    <graphics type='vnc' port='%ld'",
                           (vncunused ? -1 : 5900+vncdisplay));
         if (vnclisten) {
             virBufferVSprintf(buf, " listen='%s'", vnclisten);
diff -urN --exclude=CVS --exclude=.git --exclude='*.pem' --exclude=demoCA --exclude=.gitignore --exclude='*.orig' --exclude='*.bak' libvirt-cvs/src/xml.c libvirt-printf/src/xml.c
--- libvirt-cvs/src/xml.c	2007-03-12 10:40:29.000000000 +0000
+++ libvirt-printf/src/xml.c	2007-03-12 16:51:33.000000000 +0000
@@ -252,7 +252,7 @@
                     if (port == -1)
                         virBufferAdd(buf, "(vncunused 1)", 13);
                     else if (port >= 5900)
-                        virBufferVSprintf(buf, "(vncdisplay %d)", port - 5900);
+                        virBufferVSprintf(buf, "(vncdisplay %ld)", port - 5900);
                     xmlFree(vncport);
                 }
                 if (vnclisten != NULL) {
@@ -316,7 +316,7 @@
                 if (port == -1)
                     virBufferAdd(buf, "(vncunused 1)", 13);
                 else if (port >= 5900)
-                    virBufferVSprintf(buf, "(vncdisplay %d)", port - 5900);
+                    virBufferVSprintf(buf, "(vncdisplay %ld)", port - 5900);
                 xmlFree(vncport);
             }
             if (vnclisten != NULL) {
@@ -416,11 +416,11 @@
 
     if (boot_dev) {
         if (xmlStrEqual(boot_dev, BAD_CAST "fd")) {
-            virBufferVSprintf(buf, "(boot a)", (const char *) boot_dev);
+            virBufferVSprintf(buf, "(boot a)" /*, (const char *) boot_dev*/);
         } else if (xmlStrEqual(boot_dev, BAD_CAST "cdrom")) {
-            virBufferVSprintf(buf, "(boot d)", (const char *) boot_dev);
+            virBufferVSprintf(buf, "(boot d)" /*, (const char *) boot_dev*/);
         } else if (xmlStrEqual(boot_dev, BAD_CAST "hd")) {
-            virBufferVSprintf(buf, "(boot c)", (const char *) boot_dev);
+            virBufferVSprintf(buf, "(boot c)" /*, (const char *) boot_dev*/);
         } else {
             /* Any other type of boot dev is unsupported right now */
             virXMLError(conn, VIR_ERR_XML_ERROR, NULL, 0);
diff -urN --exclude=CVS --exclude=.git --exclude='*.pem' --exclude=demoCA --exclude=.gitignore --exclude='*.orig' --exclude='*.bak' libvirt-cvs/src/xml.h libvirt-printf/src/xml.h
--- libvirt-cvs/src/xml.h	2007-03-12 10:40:36.000000000 +0000
+++ libvirt-printf/src/xml.h	2007-03-12 16:55:57.000000000 +0000
@@ -6,6 +6,7 @@
 #define __VIR_XML_H__
 
 #include "libvirt/libvirt.h"
+#include "internal.h"
 
 #ifdef __cplusplus
 extern "C" {
@@ -27,7 +28,8 @@
 virBufferPtr virBufferNew(unsigned int size);
 void virBufferFree(virBufferPtr buf);
 int virBufferAdd(virBufferPtr buf, const char *str, int len);
-int virBufferVSprintf(virBufferPtr buf, const char *format, ...);
+int virBufferVSprintf(virBufferPtr buf, const char *format, ...)
+  ATTRIBUTE_FORMAT(printf, 2, 3);
 int virBufferStrcat(virBufferPtr buf, ...);
 char *virDomainParseXMLDesc(virConnectPtr conn, const char *xmldesc, char **name, int xendConfigVersion);
 unsigned char *virParseUUID(char **ptr, const char *uuid);
diff -urN --exclude=CVS --exclude=.git --exclude='*.pem' --exclude=demoCA --exclude=.gitignore --exclude='*.orig' --exclude='*.bak' libvirt-cvs/src/xmlrpc.c libvirt-printf/src/xmlrpc.c
--- libvirt-cvs/src/xmlrpc.c	2007-03-12 10:40:37.000000000 +0000
+++ libvirt-printf/src/xmlrpc.c	2007-03-12 17:09:20.000000000 +0000
@@ -86,7 +86,7 @@
 static xmlRpcValuePtr xmlRpcValueUnmarshalDateTime(xmlNodePtr node ATTRIBUTE_UNUSED)
 {
     /* we don't need this */
-    TODO
+    TODO;
     return NULL;
 }
 
@@ -102,7 +102,7 @@
 static xmlRpcValuePtr xmlRpcValueUnmarshalBase64(xmlNodePtr node ATTRIBUTE_UNUSED)
 {
     /* we don't need this */
-    TODO
+    TODO;
     return NULL;
 }
 
@@ -346,11 +346,11 @@
 	break;
     case XML_RPC_DATE_TIME:
 	/* FIXME */
-	TODO
+    TODO;
 	break;
     case XML_RPC_BASE64:
 	/* FIXME */
-	TODO
+    TODO;
 	break;
     case XML_RPC_STRING:
 	virBufferStrcat(buf, 
@@ -694,3 +694,17 @@
 {
     return context->faultMessage;
 }
+
+/*
+ * vim: set tabstop=4:
+ * vim: set shiftwidth=4:
+ * vim: set expandtab:
+ */
+/*
+ * Local variables:
+ *  indent-tabs-mode: nil
+ *  c-indent-level: 4
+ *  c-basic-offset: 4
+ *  tab-width: 4
+ * End:
+ */

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