On 09/20/2012 12:22 PM, Peter Krempa wrote:
> @@ -8271,6 +8286,19 @@ virDomainDefPtr
qemuParseCommandLine(virCapsPtr
> caps,
> qemuParseCommandLineBootDevs(def, token);
> } else if (STRPREFIX(token, "menu=on")) {
> def->os.bootmenu = 1;
> + } else if (STRPREFIX(token, "reboot-timeout=")) {
> + int num;
> + char *endptr = strchr(token, ',');
> + if (virStrToLong_i(token +
> strlen("reboot-timeout="),
> + &endptr, 0, &num) < 0) {
This doesn't seem ok. You assign endptr somewhere into the string and
then virStrToLong_i rewrites it, but you never check the return value. I
suppose you wanted to check if after the number is converted the next
char is a comma. You need to do the check after virStrToLong_i.
Yes, sorry for that, you're absolutely right. To be sure, is this alright?
diff --git a/src/qemu/qemu_command.c b/src/qemu/qemu_command.c
index f8012ec..4821910 100644
--- a/src/qemu/qemu_command.c
+++ b/src/qemu/qemu_command.c
@@ -8271,6 +8286,20 @@ virDomainDefPtr qemuParseCommandLine(virCapsPtr caps,
qemuParseCommandLineBootDevs(def, token);
} else if (STRPREFIX(token, "menu=on")) {
def->os.bootmenu = 1;
+ } else if (STRPREFIX(token, "reboot-timeout=")) {
+ int num;
+ char *endptr;
+ if (virStrToLong_i(token + strlen("reboot-timeout="),
+ &endptr, 10, &num) < 0) ||
+ endptr != strchr(token, ',') {
+ virReportError(VIR_ERR_INTERNAL_ERROR, "%s",
+ _("cannot parse reboot-timeout
value"));
+ goto error;
+ }
+ if (num > 65535)
+ num = 65535;
+ def->os.bios.rt_delay = num;
+ def->os.bios.rt_set = true;
}
token = strchr(token, ',');
/* This incrementation has to be done here in order to make it
--
Martin