mirror of https://gitee.com/openkylin/qemu.git
qom: interpret the return value when setting legacy properties
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com> Signed-off-by: Anthony Liguori <aliguori@us.ibm.com>
This commit is contained in:
parent
e3cb6ba65d
commit
7db4c4e8e5
|
@ -614,6 +614,28 @@ int qdev_prop_exists(DeviceState *dev, const char *name)
|
|||
return qdev_prop_find(dev, name) ? true : false;
|
||||
}
|
||||
|
||||
void error_set_from_qdev_prop_error(Error **errp, int ret, DeviceState *dev,
|
||||
Property *prop, const char *value)
|
||||
{
|
||||
switch (ret) {
|
||||
case -EEXIST:
|
||||
error_set(errp, QERR_PROPERTY_VALUE_IN_USE,
|
||||
dev->info->name, prop->name, value);
|
||||
break;
|
||||
default:
|
||||
case -EINVAL:
|
||||
error_set(errp, QERR_PROPERTY_VALUE_BAD,
|
||||
dev->info->name, prop->name, value);
|
||||
break;
|
||||
case -ENOENT:
|
||||
error_set(errp, QERR_PROPERTY_VALUE_NOT_FOUND,
|
||||
dev->info->name, prop->name, value);
|
||||
break;
|
||||
case 0:
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
int qdev_prop_parse(DeviceState *dev, const char *name, const char *value)
|
||||
{
|
||||
Property *prop;
|
||||
|
@ -632,21 +654,10 @@ int qdev_prop_parse(DeviceState *dev, const char *name, const char *value)
|
|||
}
|
||||
ret = prop->info->parse(dev, prop, value);
|
||||
if (ret < 0) {
|
||||
switch (ret) {
|
||||
case -EEXIST:
|
||||
qerror_report(QERR_PROPERTY_VALUE_IN_USE,
|
||||
dev->info->name, name, value);
|
||||
break;
|
||||
default:
|
||||
case -EINVAL:
|
||||
qerror_report(QERR_PROPERTY_VALUE_BAD,
|
||||
dev->info->name, name, value);
|
||||
break;
|
||||
case -ENOENT:
|
||||
qerror_report(QERR_PROPERTY_VALUE_NOT_FOUND,
|
||||
dev->info->name, name, value);
|
||||
break;
|
||||
}
|
||||
Error *err;
|
||||
error_set_from_qdev_prop_error(&err, ret, dev, prop, value);
|
||||
qerror_report_err(err);
|
||||
error_free(err);
|
||||
return -1;
|
||||
}
|
||||
return 0;
|
||||
|
|
|
@ -1162,10 +1162,7 @@ static void qdev_set_legacy_property(DeviceState *dev, Visitor *v, void *opaque,
|
|||
}
|
||||
|
||||
ret = prop->info->parse(dev, prop, ptr);
|
||||
if (ret != 0) {
|
||||
error_set(errp, QERR_INVALID_PARAMETER_VALUE,
|
||||
name, prop->info->name);
|
||||
}
|
||||
error_set_from_qdev_prop_error(errp, ret, dev, prop, ptr);
|
||||
g_free(ptr);
|
||||
}
|
||||
|
||||
|
|
|
@ -370,6 +370,8 @@ void qdev_prop_set_defaults(DeviceState *dev, Property *props);
|
|||
|
||||
void qdev_prop_register_global_list(GlobalProperty *props);
|
||||
void qdev_prop_set_globals(DeviceState *dev);
|
||||
void error_set_from_qdev_prop_error(Error **errp, int ret, DeviceState *dev,
|
||||
Property *prop, const char *value);
|
||||
|
||||
static inline const char *qdev_fw_name(DeviceState *dev)
|
||||
{
|
||||
|
|
Loading…
Reference in New Issue