提交 7db4c4e8 编写于 作者: P Paolo Bonzini 提交者: Anthony Liguori

qom: interpret the return value when setting legacy properties

Signed-off-by: NPaolo Bonzini <pbonzini@redhat.com>
Signed-off-by: NAnthony Liguori <aliguori@us.ibm.com>
上级 e3cb6ba6
...@@ -614,6 +614,28 @@ int qdev_prop_exists(DeviceState *dev, const char *name) ...@@ -614,6 +614,28 @@ int qdev_prop_exists(DeviceState *dev, const char *name)
return qdev_prop_find(dev, name) ? true : false; 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) int qdev_prop_parse(DeviceState *dev, const char *name, const char *value)
{ {
Property *prop; Property *prop;
...@@ -632,21 +654,10 @@ int qdev_prop_parse(DeviceState *dev, const char *name, const char *value) ...@@ -632,21 +654,10 @@ int qdev_prop_parse(DeviceState *dev, const char *name, const char *value)
} }
ret = prop->info->parse(dev, prop, value); ret = prop->info->parse(dev, prop, value);
if (ret < 0) { if (ret < 0) {
switch (ret) { Error *err;
case -EEXIST: error_set_from_qdev_prop_error(&err, ret, dev, prop, value);
qerror_report(QERR_PROPERTY_VALUE_IN_USE, qerror_report_err(err);
dev->info->name, name, value); error_free(err);
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;
}
return -1; return -1;
} }
return 0; return 0;
......
...@@ -1162,10 +1162,7 @@ static void qdev_set_legacy_property(DeviceState *dev, Visitor *v, void *opaque, ...@@ -1162,10 +1162,7 @@ static void qdev_set_legacy_property(DeviceState *dev, Visitor *v, void *opaque,
} }
ret = prop->info->parse(dev, prop, ptr); ret = prop->info->parse(dev, prop, ptr);
if (ret != 0) { error_set_from_qdev_prop_error(errp, ret, dev, prop, ptr);
error_set(errp, QERR_INVALID_PARAMETER_VALUE,
name, prop->info->name);
}
g_free(ptr); g_free(ptr);
} }
......
...@@ -370,6 +370,8 @@ void qdev_prop_set_defaults(DeviceState *dev, Property *props); ...@@ -370,6 +370,8 @@ void qdev_prop_set_defaults(DeviceState *dev, Property *props);
void qdev_prop_register_global_list(GlobalProperty *props); void qdev_prop_register_global_list(GlobalProperty *props);
void qdev_prop_set_globals(DeviceState *dev); 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) static inline const char *qdev_fw_name(DeviceState *dev)
{ {
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册