virBufferFreeAndReset(buf);
return;
}
+ if (!virBufferUse(buf)) {
+ cmd->has_error = EINVAL;
+ return;
+ }
cmd->env[cmd->nenv++] = virBufferContentAndReset(buf);
}
return;
}
- cmd->args[cmd->nargs++] = virBufferContentAndReset(buf);
+ cmd->args[cmd->nargs] = virBufferContentAndReset(buf);
+ if (!cmd->args[cmd->nargs])
+ cmd->args[cmd->nargs] = strdup("");
+ if (!cmd->args[cmd->nargs]) {
+ cmd->has_error = ENOMEM;
+ return;
+ }
+ cmd->nargs++;
}
{
virCommandPtr cmd = virCommandNew(abs_builddir "/commandhelper");
const char* const args[] = { "arg1", "arg2", NULL };
+ virBuffer buf = VIR_BUFFER_INITIALIZER;
virCommandAddArg(cmd, "-version");
virCommandAddArgPair(cmd, "-log", "bar.log");
virCommandAddArgSet(cmd, args);
- virCommandAddArgList(cmd, "arg3", "arg4", NULL);
+ virCommandAddArgBuffer(cmd, &buf);
+ virBufferAddLit(&buf, "arg4");
+ virCommandAddArgBuffer(cmd, &buf);
+ virCommandAddArgList(cmd, "arg5", "arg6", NULL);
+
+ if (virBufferUse(&buf)) {
+ printf("Buffer not transferred\n");
+ virBufferFreeAndReset(&buf);
+ virCommandFree(cmd);
+ return -1;
+ }
if (virCommandRun(cmd, NULL) < 0) {
virErrorPtr err = virGetLastError();