提交 ae027de3 编写于 作者: C Chris Lalancette

Handle arbitrary qemu command-lines in qemuParseCommandLine.

Now that we have the ability to specify arbitrary qemu
command-line parameters in the XML, use it to handle unknown
command-line parameters when doing a native-to-xml conversion.

Changes since v1:
 - Rename num_extra to num_args
 - Fix up a memory leak on an error path

Changes since v2:
 - Add a VIR_WARN when adding the argument via qemu:arg

Changes since v3:
 - None
Signed-off-by: NChris Lalancette <clalance@redhat.com>
上级 869939a5
......@@ -5969,6 +5969,7 @@ virDomainDefPtr qemuParseCommandLine(virCapsPtr caps,
const char **nics = NULL;
int video = VIR_DOMAIN_VIDEO_TYPE_CIRRUS;
int nvirtiodisk = 0;
qemuDomainCmdlineDefPtr cmd;
if (!progargv[0]) {
qemuReportError(VIR_ERR_INTERNAL_ERROR,
......@@ -5979,6 +5980,10 @@ virDomainDefPtr qemuParseCommandLine(virCapsPtr caps,
if (VIR_ALLOC(def) < 0)
goto no_memory;
/* allocate the cmdlinedef up-front; if it's unused, we'll free it later */
if (VIR_ALLOC(cmd) < 0)
goto no_memory;
virUUIDGenerate(def->uuid);
def->id = -1;
......@@ -6403,12 +6408,17 @@ virDomainDefPtr qemuParseCommandLine(virCapsPtr caps,
} else if (STREQ(arg, "-S")) {
/* ignore, always added by libvirt */
} else {
VIR_WARN("unknown QEMU argument '%s' during conversion", arg);
#if 0
qemuReportError(VIR_ERR_INTERNAL_ERROR,
_("unknown argument '%s'"), arg);
goto error;
#endif
/* something we can't yet parse. Add it to the qemu namespace
* cmdline/environment advanced options and hope for the best
*/
VIR_WARN("unknown QEMU argument '%s', adding to the qemu namespace",
arg);
if (VIR_REALLOC_N(cmd->args, cmd->num_args+1) < 0)
goto no_memory;
cmd->args[cmd->num_args] = strdup(arg);
if (cmd->args[cmd->num_args] == NULL)
goto no_memory;
cmd->num_args++;
}
}
......@@ -6477,11 +6487,19 @@ virDomainDefPtr qemuParseCommandLine(virCapsPtr caps,
if (virDomainDefAddImplicitControllers(def) < 0)
goto error;
if (cmd->num_args || cmd->num_env) {
def->ns = caps->ns;
def->namespaceData = cmd;
}
else
VIR_FREE(cmd);
return def;
no_memory:
virReportOOMError();
error:
VIR_FREE(cmd);
virDomainDefFree(def);
VIR_FREE(nics);
return NULL;
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册