On Fri, Dec 12, 2008 at 08:30:26PM +0000, Daniel P. Berrange wrote:
> This is crying out for us to write a virASprintf() that explicitly
> always sets path = NULL upon failure. And then blacklist 'asprintf'
> in make syntax-check.
Possible virAsprintf attached. I've already moved the posted patch
series over to it. I'll blacklist it once this is in and we have more
calles moved over. O.k.?
Cheers,
-- Guido
>From 31b6bf2199b42f40dd138971802d6afa94f59acf Mon Sep 17 00:00:00 2001
From: =?utf-8?q?Guido=20G=C3=BCnther?= <[email protected]>
Date: Fri, 12 Dec 2008 22:18:07 +0100
Subject: [PATCH] safe virAsprintf
---
src/libvirt_sym.version.in | 1 +
src/util.c | 20 ++++++++++++++++++++
src/util.h | 1 +
3 files changed, 22 insertions(+), 0 deletions(-)
diff --git a/src/libvirt_sym.version.in b/src/libvirt_sym.version.in
index de0bc4a..684be01 100644
--- a/src/libvirt_sym.version.in
+++ b/src/libvirt_sym.version.in
@@ -595,6 +595,7 @@ libvirt_priva...@version@ {
virFileReadPid;
virFileLinkPointsTo;
virParseNumber;
+ virAsprintf;
virRun;
virSkipSpaces;
diff --git a/src/util.c b/src/util.c
index da26009..820d11c 100644
--- a/src/util.c
+++ b/src/util.c
@@ -1153,6 +1153,26 @@ virParseNumber(const char **str)
return (ret);
}
+/**
+ * virAsprintf
+ *
+ * like asprintf but makes sure *strp == NULL on failure
+ */
+int
+virAsprintf(char **strp, const char *fmt, ...)
+{
+ va_list ap;
+ int ret;
+
+ va_start(ap, fmt);
+
+ if ((ret = vasprintf(strp, fmt, ap)) == -1)
+ *strp = NULL;
+
+ va_end(ap);
+ return ret;
+}
+
/* Compare two MAC addresses, ignoring differences in case,
* as well as leading zeros.
*/
diff --git a/src/util.h b/src/util.h
index 0748cbf..3d603dc 100644
--- a/src/util.h
+++ b/src/util.h
@@ -112,6 +112,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, ...);
#define VIR_MAC_BUFLEN 6
#define VIR_MAC_PREFIX_BUFLEN 3
--
1.6.0.2
--
Libvir-list mailing list
[email protected]
https://www.redhat.com/mailman/listinfo/libvir-list