Re: [PATCH v2 1/4] util: string: Introduce macro for automatic string lists

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

 



On 2/27/19 10:52 AM, Erik Skultety wrote:
On Tue, Feb 26, 2019 at 04:48:23PM +0100, Peter Krempa wrote:
Similar to VIR_AUTOPTR, VIR_AUTOSTRINGLIST defines a list of strings
which will be freed if the pointer is leaving scope.

Signed-off-by: Peter Krempa <pkrempa@xxxxxxxxxx>
---
  src/libvirt_private.syms |  1 +
  src/util/virstring.c     | 10 ++++++++++
  src/util/virstring.h     | 10 ++++++++++
  3 files changed, 21 insertions(+)

diff --git a/src/libvirt_private.syms b/src/libvirt_private.syms
index 038a744981..e68e3f3a3b 100644
--- a/src/libvirt_private.syms
+++ b/src/libvirt_private.syms
@@ -2958,6 +2958,7 @@ virStringHasControlChars;
  virStringIsEmpty;
  virStringIsPrintable;
  virStringListAdd;
+virStringListAutoFree;
  virStringListFree;
  virStringListFreeCount;
  virStringListGetFirstWithPrefix;
diff --git a/src/util/virstring.c b/src/util/virstring.c
index e890dde546..8a791f96d4 100644
--- a/src/util/virstring.c
+++ b/src/util/virstring.c
@@ -318,6 +318,16 @@ void virStringListFree(char **strings)
  }


+void virStringListAutoFree(char ***strings)
+{
+    if (!*strings)
+        return;
+
+    virStringListFree(*strings);
+    *strings = NULL;
+}
+
+
  /**
   * virStringListFreeCount:
   * @strings: array of strings to free
diff --git a/src/util/virstring.h b/src/util/virstring.h
index aef82471c2..d14b7f4f49 100644
--- a/src/util/virstring.h
+++ b/src/util/virstring.h
@@ -53,6 +53,7 @@ int virStringListCopy(char ***dst,
                        const char **src);

  void virStringListFree(char **strings);
+void virStringListAutoFree(char ***strings);
  void virStringListFreeCount(char **strings,
                              size_t count);

@@ -307,6 +308,15 @@ int virStringParsePort(const char *str,
                         unsigned int *port)
      ATTRIBUTE_NONNULL(2) ATTRIBUTE_RETURN_CHECK;

+/**
+ * VIR_AUTOSTRINGLIST:
+ *
+ * Declares a NULL-terminated list of strings which will be automatically freed
+ * when the pointer goes out of scope.
+ */
+# define VIR_AUTOSTRINGLIST \
+        __attribute__((cleanup(virStringListAutoFree))) char **
+

IIRC at the beginning we said that all the VIR_AUTO macros should be consistent
in terms of how we use the macro, IOW:

VIR_AUTOFREE(type)
VIR_AUTOPTR(type)
VIR_AUTOCLEAN(type)

Well, we already have VIR_AUTOCLOSE. I don't mind having a macro that implicitly defines type of a variable.

On the other hand, this could be renamed to VIR_AUTOLISTFREE as it is capable of freeing any NULL terminated list of pointers where plain free() ove each member is enough. But it will have to lose the implicit type def in that case.

Michal

--
libvir-list mailing list
libvir-list@xxxxxxxxxx
https://www.redhat.com/mailman/listinfo/libvir-list



[Index of Archives]     [Virt Tools]     [Libvirt Users]     [Lib OS Info]     [Fedora Users]     [Fedora Desktop]     [Fedora SELinux]     [Big List of Linux Books]     [Yosemite News]     [KDE Users]     [Fedora Tools]

  Powered by Linux