monitor: Use argument type 'T' for migrate_set_downtime

Before, it used type 's', which strips quotes and interprets escapes,
and is quite inappropriate for QMP.

Negative arguments are no flushed to zero.  Before, they were cast to
uint32_t, which wrecked the sign.

Ridiculously large arguments including infinities are now rejected.
Before, they were interpreted as zero.  Same for NaN.

Signed-off-by: Markus Armbruster <armbru@redhat.com>
Signed-off-by: Anthony Liguori <aliguori@us.ibm.com>
This commit is contained in:
Markus Armbruster 2010-01-25 14:23:07 +01:00 committed by Anthony Liguori
parent fccfb11e0d
commit b0fbf7d342
2 changed files with 3 additions and 14 deletions

View file

@ -134,21 +134,10 @@ uint64_t migrate_max_downtime(void)
void do_migrate_set_downtime(Monitor *mon, const QDict *qdict)
{
char *ptr;
double d;
const char *value = qdict_get_str(qdict, "value");
d = strtod(value, &ptr);
if (!strcmp(ptr,"ms")) {
d *= 1000000;
} else if (!strcmp(ptr,"us")) {
d *= 1000;
} else if (!strcmp(ptr,"ns")) {
} else {
/* all else considered to be seconds */
d *= 1000000000;
}
d = qdict_get_double(qdict, "value") * 1e9;
d = MAX(0, MIN(UINT64_MAX, d));
max_downtime = (uint64_t)d;
}

View file

@ -775,7 +775,7 @@ ETEXI
{
.name = "migrate_set_downtime",
.args_type = "value:s",
.args_type = "value:T",
.params = "value",
.help = "set maximum tolerated downtime (in seconds) for migrations",
.mhandler.cmd = do_migrate_set_downtime,