[libvirt] [PATCH 2/2] virCommand: document behavior on no output

Eric Blake eblake at redhat.com
Fri Dec 3 21:28:51 UTC 2010


Option 2.  Which one should I go with?  By the way, my pending patch
for converting openvz to use virCommand instead of popen is impacted
(it has a potential null dereference if we go with option 1).

* docs/internals/command.html.in: Update documentation.
* src/util/command.c (virCommandSetOutputBuffer)
(virCommandSetErrorBuffer, virCommandProcessIO) Guarantee empty
string on no output.
---
 docs/internals/command.html.in |    8 +++++---
 src/util/command.c             |   14 ++++++++++++++
 2 files changed, 19 insertions(+), 3 deletions(-)

diff --git a/docs/internals/command.html.in b/docs/internals/command.html.in
index ea9ec64..d2fb133 100644
--- a/docs/internals/command.html.in
+++ b/docs/internals/command.html.in
@@ -348,9 +348,11 @@
 </pre>

     <p>
-      Once the command has finished executing, these buffers
-      will contain the output, or be NULL if there was no output. It
-      is the callers responsibility to free these buffers.
+      Once the command has finished executing, these buffers will
+      contain the output.  If there was no output but virCommandRun
+      was successful, then they will be an empty string; if there was
+      an error, then they might still be NULL. It is the callers
+      responsibility to free these buffers.
     </p>

     <h3><a name="directory">Setting working directory</a></h3>
diff --git a/src/util/command.c b/src/util/command.c
index 1923799..4fb5048 100644
--- a/src/util/command.c
+++ b/src/util/command.c
@@ -860,6 +860,20 @@ virCommandProcessIO(virCommandPtr cmd)
         }
     }

+    /* If there was no output, the populate with the empty string.  */
+    if (cmd->outbuf && !*cmd->outbuf) {
+        if ((*cmd->outbuf = strdup("")) == NULL) {
+            virReportOOMError();
+            return -1;
+        }
+    }
+    if (cmd->errbuf && !*cmd->errbuf) {
+        if ((*cmd->errbuf = strdup("")) == NULL) {
+            virReportOOMError();
+            return -1;
+        }
+    }
+
     return 0;
 }

-- 
1.7.3.2




More information about the libvir-list mailing list