[Pkg-libvirt-commits] [libguestfs] 30/36: daemon: add split_lines_sb

Hilko Bengen bengen at moszumanska.debian.org
Sun Nov 1 17:13:45 UTC 2015


This is an automated email from the git hooks/post-receive script.

bengen pushed a commit to annotated tag upstream/1.29.47
in repository libguestfs.

commit 6118e2239c8cd255e2b9aa76c6929b05a7eace98
Author: Pino Toscano <ptoscano at redhat.com>
Date:   Wed Jun 17 13:04:59 2015 +0200

    daemon: add split_lines_sb
    
    Mold split_lines_sb from split_lines, so it returns the strings buffer
    with the result of the split. This way, we can have the number of lines
    in the array, with no need to count them again later.
    
    split_lines is rewritten to take the ownership of the result of
    split_lines_sb.
---
 daemon/daemon.h   |  1 +
 daemon/guestfsd.c | 37 ++++++++++++++++++++++++++++---------
 2 files changed, 29 insertions(+), 9 deletions(-)

diff --git a/daemon/daemon.h b/daemon/daemon.h
index f2244b0..136e9a9 100644
--- a/daemon/daemon.h
+++ b/daemon/daemon.h
@@ -110,6 +110,7 @@ extern int compare_device_names (const char *a, const char *b);
 extern char *concat_strings (char *const *argv);
 extern char *join_strings (const char *separator, char *const *argv);
 
+extern struct stringsbuf split_lines_sb (char *str);
 extern char **split_lines (char *str);
 
 extern char **empty_list (void);
diff --git a/daemon/guestfsd.c b/daemon/guestfsd.c
index 198b2b2..21b3600 100644
--- a/daemon/guestfsd.c
+++ b/daemon/guestfsd.c
@@ -1115,7 +1115,8 @@ commandrvf (char **stdoutput, char **stderror, int flags,
     return -1;
 }
 
-/* Split an output string into a NULL-terminated list of lines.
+/* Split an output string into a NULL-terminated list of lines,
+ * wrapped into a stringsbuf.
  * Typically this is used where we have run an external command
  * which has printed out a list of things, and we want to return
  * an actual list.
@@ -1132,15 +1133,23 @@ commandrvf (char **stdoutput, char **stderror, int flags,
  * function (which is usually OK because it's the 'out' string
  * from command()).  You can free the original string, because
  * add_string() strdups the strings.
+ *
+ * argv in the stringsbuf will be NULL in case of errors.
  */
-char **
-split_lines (char *str)
+struct stringsbuf
+split_lines_sb (char *str)
 {
   DECLARE_STRINGSBUF (lines);
+  DECLARE_STRINGSBUF (null);
   char *p, *pend;
 
-  if (STREQ (str, ""))
-    return empty_list ();
+  if (STREQ (str, "")) {
+    /* No need to check the return value, as the stringsbuf will be
+     * returned as it is anyway.
+     */
+    end_stringsbuf (&lines);
+    return lines;
+  }
 
   p = str;
   while (p) {
@@ -1155,16 +1164,26 @@ split_lines (char *str)
     }
 
     if (add_string (&lines, p) == -1) {
-      return NULL;
+      free_stringsbuf (&lines);
+      return null;
     }
 
     p = pend;
   }
 
-  if (end_stringsbuf (&lines) == -1)
-    return NULL;
+  if (end_stringsbuf (&lines) == -1) {
+    free_stringsbuf (&lines);
+    return null;
+  }
+
+  return lines;
+}
 
-  return lines.argv;
+char **
+split_lines (char *str)
+{
+  struct stringsbuf sb = split_lines_sb (str);
+  return take_stringsbuf (&sb);
 }
 
 char **

-- 
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/pkg-libvirt/libguestfs.git



More information about the Pkg-libvirt-commits mailing list