From 36c612b21c60e7c340a3ef85991e00efa118f6e3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Guido=20G=C3=BCnther?= Date: Mon, 15 Dec 2008 20:09:29 +0000 Subject: [PATCH] add virAsprintf --- ChangeLog | 6 ++++++ src/libvirt_sym.version.in | 1 + src/util.c | 20 ++++++++++++++++++++ src/util.h | 1 + 4 files changed, 28 insertions(+) diff --git a/ChangeLog b/ChangeLog index 44a18b3fb0..cd379edeb9 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,9 @@ +Mon Dec 15 21:05:56 CET 2008 Guido Günther + + Add virAsprintf as safer asprintf helper + * src/util.c, src/util.h (virAsprintf): new function + * src/libvirt_symver.in: export symbol + Mon Dec 15 16:33:25 CET 2008 Daniel Veillard * src/storage_driver.c: fix a segfault, patch by Miloslav TrmaC diff --git a/src/libvirt_sym.version.in b/src/libvirt_sym.version.in index de0bc4a79b..684be01d41 100644 --- a/src/libvirt_sym.version.in +++ b/src/libvirt_sym.version.in @@ -595,6 +595,7 @@ LIBVIRT_PRIVATE_@VERSION@ { virFileReadPid; virFileLinkPointsTo; virParseNumber; + virAsprintf; virRun; virSkipSpaces; diff --git a/src/util.c b/src/util.c index 9e6e0868b3..12097d41aa 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 0748cbf15f..3d603dc531 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