
On 04.02.2013 16:47, Peter Krempa wrote:
On 02/04/13 15:56, Michal Privoznik wrote:
Currently, if we want to feed stdin, or catch stdout or stderr of a virCommand we have to use virCommandRun(). When using virCommandRunAsync() we have to register FD handles by hand. This may lead to code duplication. Hence, introduce an internal API, which does this automatically within virCommandRunAsync(). The intended usage looks like this:
virCommandPtr cmd = virCommandNew*(...); char *buf = NULL;
...
virCommandSetOutputBuffer(cmd, &buf); virCommandDoAsyncIO(cmd);
if (virCommandRunAsync(cmd, NULL) < 0) goto cleanup;
...
if (virCommandWait(cmd, NULL) < 0) goto cleanup;
/* @buf now contains @cmd's stdout */ VIR_DEBUG("STDOUT: %s", NULLSTR(buf));
...
cleanup: VIR_FREE(buf); virCommandFree(cmd);
Note, that both stdout and stderr buffers may change until virCommandWait() returns. --- src/libvirt_private.syms | 1 + src/util/vircommand.c | 308 ++++++++++++++++++++++++++++++++++++++++++++--- src/util/vircommand.h | 1 + 3 files changed, 293 insertions(+), 17 deletions(-)
ACK with the two nits fixed. ACKs on the unchanged patches from the last time still stand.
Peter
Thanks, fixed and pushed. Michal