[libvirt] [PATCH 04/12] utils: Add virStringUpdate

Marc Hartmayer mhartmay at linux.vnet.ibm.com
Wed May 9 14:56:14 UTC 2018


If @src is an empty string then @dst will be freed otherwise @dst will
be a duplicate of @src.

Signed-off-by: Marc Hartmayer <mhartmay at linux.vnet.ibm.com>
Reviewed-by: Boris Fiuczynski <fiuczy at linux.ibm.com>
Reviewed-by: Stefan Zimmermann <stzi at linux.ibm.com>
---
 src/libvirt_private.syms |  1 +
 src/util/virstring.c     | 27 +++++++++++++++++++++++++++
 src/util/virstring.h     |  2 ++
 3 files changed, 30 insertions(+)

diff --git a/src/libvirt_private.syms b/src/libvirt_private.syms
index f8883dc50da2..c684f21905af 100644
--- a/src/libvirt_private.syms
+++ b/src/libvirt_private.syms
@@ -2871,6 +2871,7 @@ virStringStripControlChars;
 virStringStripIPv6Brackets;
 virStringToUpper;
 virStringTrimOptionalNewline;
+virStringUpdate;
 virStrncpy;
 virStrndup;
 virStrToDouble;
diff --git a/src/util/virstring.c b/src/util/virstring.c
index 15f367af7c18..1e9bf1f561b5 100644
--- a/src/util/virstring.c
+++ b/src/util/virstring.c
@@ -1248,6 +1248,33 @@ virStringReplace(const char *haystack,
 
 
 /**
+ * virStringUpdate:
+ * @dest: where to update string
+ * @src: string to duplicate
+ *
+ * If @src is an empty string then @dest will be freed otherwise @dest
+ * will be a duplicate of @src.
+ *
+ * Returns -1 on failure (with OOM error reported), 0 if @dest was
+ * freed only, 1 if @src was copied
+ */
+int
+virStringUpdate(char **dest, const char *src)
+{
+    if (virStringIsEmpty(src)) {
+        VIR_FREE(*dest);
+        return 0;
+    } else {
+        char *temp = *dest;
+        if (VIR_STRDUP(*dest, src) < 0)
+            return -1;
+        VIR_FREE(temp);
+        return 1;
+    }
+}
+
+
+/**
  * virStringStripIPv6Brackets:
  * @str: the string to strip
  *
diff --git a/src/util/virstring.h b/src/util/virstring.h
index fa2ec1df4def..69f2cb69037d 100644
--- a/src/util/virstring.h
+++ b/src/util/virstring.h
@@ -290,6 +290,8 @@ char *virStringReplace(const char *haystack,
                        const char *oldneedle,
                        const char *newneedle)
     ATTRIBUTE_NONNULL(1) ATTRIBUTE_NONNULL(2) ATTRIBUTE_NONNULL(3);
+int virStringUpdate(char **dest, const char *src)
+    ATTRIBUTE_NONNULL(1);
 
 void virStringStripIPv6Brackets(char *str);
 bool virStringHasChars(const char *str,
-- 
2.13.4




More information about the libvir-list mailing list