]> git.ipfire.org Git - thirdparty/libvirt.git/commitdiff
util: add virVasprintf
authorEric Blake <eblake@redhat.com>
Mon, 22 Nov 2010 23:39:47 +0000 (16:39 -0700)
committerEric Blake <eblake@redhat.com>
Thu, 2 Dec 2010 18:23:15 +0000 (11:23 -0700)
* src/util/util.h (virVasprintf): New declaration.
* src/util/util.c (virVasprintf): New function.
(virAsprintf): Use it.
* src/util/virtaudit.c (virAuditSend): Likewise.
* src/libvirt_private.syms: Export it.
* cfg.mk (sc_prohibit_asprintf): Also prohibit vasprintf.
* .x-sc_prohibit_asprintf: Add exemption.

.x-sc_prohibit_asprintf
cfg.mk
src/libvirt_private.syms
src/util/util.c
src/util/util.h
src/util/virtaudit.c

index 614c238b3a9dafb896633bdbbb2fb5463c7816fb..d03b947b01d117d73082548c7ca860d48cbf20fe 100644 (file)
@@ -1,3 +1,5 @@
+ChangeLog
+^bootstrap.conf$
 ^gnulib/
 ^po/
-ChangeLog
+^src/util/util.c$
diff --git a/cfg.mk b/cfg.mk
index 5576ecb8c5a92685f1d2bc50e6f649af8b24c8ee..6e474c4e74afdc81df5da6053d0b3edfc4b5fa52 100644 (file)
--- a/cfg.mk
+++ b/cfg.mk
@@ -255,7 +255,7 @@ sc_prohibit_strncmp:
 
 # Use virAsprintf rather than as'printf since *strp is undefined on error.
 sc_prohibit_asprintf:
-       @prohibit='\<a[s]printf\>'                                      \
+       @prohibit='\<v?a[s]printf\>'                                    \
        halt='use virAsprintf, not as'printf                            \
          $(_sc_search_regexp)
 
index f251c94345d45b2026d528cd1b3ca3b48e90f5b0..a21928a5a22906e59294fae26cdf7db0ac4766a7 100644 (file)
@@ -817,6 +817,7 @@ virStrToLong_ull;
 virStrcpy;
 virStrncpy;
 virTimestamp;
+virVasprintf;
 
 
 # uuid.h
index 7b8bf4ab64f7c27a2a280737fab2be63628c8b4c..f6050dee21ea06bb43b3e674e731791f686c50ae 100644 (file)
@@ -2198,6 +2198,22 @@ virParseVersionString(const char *str, unsigned long *version)
     return 0;
 }
 
+/**
+ * virVasprintf
+ *
+ * like glibc's vasprintf but makes sure *strp == NULL on failure
+ */
+int
+virVasprintf(char **strp, const char *fmt, va_list list)
+{
+    int ret;
+
+    if ((ret = vasprintf(strp, fmt, list)) == -1)
+        *strp = NULL;
+
+    return ret;
+}
+
 /**
  * virAsprintf
  *
@@ -2210,10 +2226,7 @@ virAsprintf(char **strp, const char *fmt, ...)
     int ret;
 
     va_start(ap, fmt);
-
-    if ((ret = vasprintf(strp, fmt, ap)) == -1)
-        *strp = NULL;
-
+    ret = virVasprintf(strp, fmt, ap);
     va_end(ap);
     return ret;
 }
index 0385fe18ef64f88500222f2ede5171b0f450a3d3..deaf8bbc255b1a28bac9b7c90d1f533be24325eb 100644 (file)
@@ -31,6 +31,7 @@
 # include <unistd.h>
 # include <sys/select.h>
 # include <sys/types.h>
+# include <stdarg.h>
 
 # ifndef MIN
 #  define MIN(a, b) ((a) < (b) ? (a) : (b))
@@ -202,7 +203,10 @@ int virMacAddrCompare (const char *mac1, const char *mac2);
 void virSkipSpaces(const char **str);
 int virParseNumber(const char **str);
 int virParseVersionString(const char *str, unsigned long *version);
-int virAsprintf(char **strp, const char *fmt, ...) ATTRIBUTE_FMT_PRINTF(2, 3);
+int virAsprintf(char **strp, const char *fmt, ...)
+    ATTRIBUTE_NONNULL(1) ATTRIBUTE_NONNULL(2) ATTRIBUTE_FMT_PRINTF(2, 3);
+int virVasprintf(char **strp, const char *fmt, va_list list)
+    ATTRIBUTE_NONNULL(1) ATTRIBUTE_NONNULL(2) ATTRIBUTE_FMT_PRINTF(2, 0);
 char *virStrncpy(char *dest, const char *src, size_t n, size_t destbytes)
     ATTRIBUTE_RETURN_CHECK;
 char *virStrcpy(char *dest, const char *src, size_t destbytes)
index 33be4d967693972ed4e901af504117534fbfe176..de7b357d3a66aa0f7a1b95dca6e811b40bd54ce4 100644 (file)
@@ -95,7 +95,7 @@ void virAuditSend(const char *file ATTRIBUTE_UNUSED, const char *func,
 #endif
 
     va_start(args, fmt);
-    if (vasprintf(&str, fmt, args) < 0) {
+    if (virVasprintf(&str, fmt, args) < 0) {
         VIR_WARN0("Out of memory while formatting audit message");
         str = NULL;
     }