On 01/19/2016 05:03 AM, Ian Campbell wrote: > I went to ping this but noticed that I had sent it to "jimfehlig" (i.e. no > domain), so no wonder there was no reply! > > To: line fixed here, let me know if you would prefer a resend. That would be much appreciated, thanks! > > Ian. > > On Wed, 2015-12-16 at 12:09 +0000, Ian Campbell wrote: >> ... and consolidate the cmdline/extra/root parsing to facilitate doing >> so. >> >> The logic is the same as xl's parse_cmdline from the current xen.git master >> branch (e6f0e099d2c17de47fd86e817b1998db903cab61), except I was unable >> to figure out how/where to route the warning about ignoring >> root+extra if cmdline was specified. I think VIR_WARN() would be appropriate. >> >> Signed-off-by: Ian Campbell <ian.campbell@xxxxxxxxxx> >> --- >> src/xenconfig/xen_xl.c | 62 ++++++++++++++++++++++++++++++------------ >> -------- >> 1 file changed, 37 insertions(+), 25 deletions(-) >> >> diff --git a/src/xenconfig/xen_xl.c b/src/xenconfig/xen_xl.c >> index 91cdff6..ba8b938 100644 >> --- a/src/xenconfig/xen_xl.c >> +++ b/src/xenconfig/xen_xl.c >> @@ -58,11 +58,45 @@ extern int xlu_disk_parse(XLU_Config *cfg, >> libxl_device_disk *disk); >> #endif >> >> +static int xenParseCmdline(virConfPtr conf, char **r_cmdline) >> +{ >> + char *cmdline = NULL; >> + const char *root = NULL, *extra = NULL, *buf = NULL; In theory, these three don't need to be initialized since xenConfigGetString will do that. But in practice, I worry that Coverity might complain :-/. Regards, Jim >> + >> + if (xenConfigGetString(conf, "cmdline", &buf, NULL) < 0) >> + return -1; >> + >> + if (xenConfigGetString(conf, "root", &root, NULL) < 0) >> + return -1; >> + >> + if (xenConfigGetString(conf, "extra", &extra, NULL) < 0) >> + return -1; >> + >> + if (buf) { >> + if (VIR_STRDUP(cmdline, buf) < 0) >> + return -1; >> + /* root or extra are ignored in this case. */ >> + } else { >> + if (root && extra) { >> + if (virAsprintf(&cmdline, "root=%s %s", root, extra) < 0) >> + return -1; >> + } else if (root) { >> + if (virAsprintf(&cmdline, "root=%s", root) < 0) >> + return -1; >> + } else if (extra) { >> + if (VIR_STRDUP(cmdline, extra) < 0) >> + return -1; >> + } >> + } >> + >> + *r_cmdline = cmdline; >> + return 0; >> +} >> + >> static int >> xenParseXLOS(virConfPtr conf, virDomainDefPtr def, virCapsPtr caps) >> { >> size_t i; >> - const char *extra, *root; >> >> if (def->os.type == VIR_DOMAIN_OSTYPE_HVM) { >> const char *boot; >> @@ -84,19 +118,8 @@ xenParseXLOS(virConfPtr conf, virDomainDefPtr def, >> virCapsPtr caps) >> if (xenConfigCopyStringOpt(conf, "ramdisk", &def->os.initrd) < >> 0) >> return -1; >> >> - if (xenConfigGetString(conf, "extra", &extra, NULL) < 0) >> - return -1; >> - >> - if (xenConfigGetString(conf, "root", &root, NULL) < 0) >> + if (xenParseCmdline(conf, &def->os.cmdline) < 0) >> return -1; >> - >> - if (root) { >> - if (virAsprintf(&def->os.cmdline, "root=%s %s", root, extra) >> < 0) >> - return -1; >> - } else { >> - if (VIR_STRDUP(def->os.cmdline, extra) < 0) >> - return -1; >> - } >> #endif >> >> if (xenConfigGetString(conf, "boot", &boot, "c") < 0) >> @@ -132,19 +155,8 @@ xenParseXLOS(virConfPtr conf, virDomainDefPtr def, >> virCapsPtr caps) >> if (xenConfigCopyStringOpt(conf, "ramdisk", &def->os.initrd) < >> 0) >> return -1; >> >> - if (xenConfigGetString(conf, "extra", &extra, NULL) < 0) >> - return -1; >> - >> - if (xenConfigGetString(conf, "root", &root, NULL) < 0) >> + if (xenParseCmdline(conf, &def->os.cmdline) < 0) >> return -1; >> - >> - if (root) { >> - if (virAsprintf(&def->os.cmdline, "root=%s %s", root, extra) >> < 0) >> - return -1; >> - } else { >> - if (VIR_STRDUP(def->os.cmdline, extra) < 0) >> - return -1; >> - } >> } >> >> return 0; > _______________________________________________ > Xen-devel mailing list > Xen-devel@xxxxxxxxxxxxx > http://lists.xen.org/xen-devel -- libvir-list mailing list libvir-list@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/libvir-list