[libvirt] [PATCH 4/4] command: ease use with virBuffer
Eric Blake
eblake at redhat.com
Fri Dec 10 21:40:12 UTC 2010
On 12/10/2010 12:58 PM, Laine Stump wrote:
> On 12/10/2010 02:18 PM, Eric Blake wrote:
>> * src/util/command.h (virCommandAddArgBuffer)
>> (virCommandAddEnvBuffer): New prototypes.
>> * src/util/command.c (virCommandAddArgBuffer)
>> (virCommandAddEnvBuffer): Implement them.
>> * src/libvirt_private.syms (command.h): Export them.
>> * src/qemu/qemu_conf.c (qemudBuildCommandLine): Use them, plugging
>> a memory leak on rbd_hosts in the process.
>> ---
>>
>
> BTW, I'm really loving the ability to just forget about error checking
> until after all the args are added. It really cuts down on the lines of
> code, as well as making it easier to follow what's really happening.
Me too!
>
>> src/libvirt_private.syms | 2 ++
>> src/qemu/qemu_conf.c | 46
>> +++++++++-------------------------------------
>> src/util/command.c | 43
>> +++++++++++++++++++++++++++++++++++++++++++
>> src/util/command.h | 17 +++++++++++++++++
>> 4 files changed, 71 insertions(+), 37 deletions(-)
>
> ACK. The new APIs and their uses all look fine to me.
Actually, I noticed a minor problem. I squashed 3 and 4 together, then
squashed this in, then pushed:
diff --git i/src/util/command.c w/src/util/command.c
index 90c0d3a..f9d475e 100644
--- i/src/util/command.c
+++ w/src/util/command.c
@@ -316,13 +316,16 @@ virCommandAddEnvString(virCommandPtr cmd, const
char *str)
/*
* Convert a buffer containing preformatted name=value into an
- * environment variable of the child
+ * environment variable of the child.
+ * Correctly transfers memory errors or contents from buf to cmd.
*/
void
virCommandAddEnvBuffer(virCommandPtr cmd, virBufferPtr buf)
{
- if (!cmd || cmd->has_error)
+ if (!cmd || cmd->has_error) {
+ virBufferFreeAndReset(buf);
return;
+ }
/* env plus trailing NULL. */
if (virBufferError(buf) ||
@@ -403,13 +406,16 @@ virCommandAddArg(virCommandPtr cmd, const char *val)
/*
- * Convert a buffer into a command line argument to the child
+ * Convert a buffer into a command line argument to the child.
+ * Correctly transfers memory errors or contents from buf to cmd.
*/
void
virCommandAddArgBuffer(virCommandPtr cmd, virBufferPtr buf)
{
- if (!cmd || cmd->has_error)
+ if (!cmd || cmd->has_error) {
+ virBufferFreeAndReset(buf);
return;
+ }
/* Arg plus trailing NULL. */
if (virBufferError(buf) ||
--
Eric Blake eblake at redhat.com +1-801-349-2682
Libvirt virtualization library http://libvirt.org
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 619 bytes
Desc: OpenPGP digital signature
URL: <http://listman.redhat.com/archives/libvir-list/attachments/20101210/93ed5f27/attachment-0001.sig>
More information about the libvir-list
mailing list