shill: allow property accessors to return an error message if a
property's value cannot be changed.
also, reduce some code duplication in property_store.cc
BUG=chromium-os:21384
TEST=unittests
Change-Id: Iaac8d40bbb9e9a1341d6c6d01642885d88ac0e27
Reviewed-on: http://gerrit.chromium.org/gerrit/8925
Reviewed-by: mukesh agrawal <quiche@chromium.org>
Tested-by: mukesh agrawal <quiche@chromium.org>
diff --git a/dbus_adaptor.cc b/dbus_adaptor.cc
index d1c082d..dc69d9d 100644
--- a/dbus_adaptor.cc
+++ b/dbus_adaptor.cc
@@ -42,43 +42,43 @@
const string &name,
const ::DBus::Variant &value,
::DBus::Error *error) {
- bool set = false;
- Error e(Error::kInvalidArguments, "Could not write " + name);
+ Error e;
if (DBusAdaptor::IsBool(value.signature()))
- set = store->SetBoolProperty(name, value.reader().get_bool(), &e);
+ store->SetBoolProperty(name, value.reader().get_bool(), &e);
else if (DBusAdaptor::IsByte(value.signature()))
- set = store->SetUint8Property(name, value.reader().get_byte(), &e);
+ store->SetUint8Property(name, value.reader().get_byte(), &e);
else if (DBusAdaptor::IsInt16(value.signature()))
- set = store->SetInt16Property(name, value.reader().get_int16(), &e);
+ store->SetInt16Property(name, value.reader().get_int16(), &e);
else if (DBusAdaptor::IsInt32(value.signature()))
- set = store->SetInt32Property(name, value.reader().get_int32(), &e);
+ store->SetInt32Property(name, value.reader().get_int32(), &e);
else if (DBusAdaptor::IsPath(value.signature()))
- set = store->SetStringProperty(name, value.reader().get_path(), &e);
+ store->SetStringProperty(name, value.reader().get_path(), &e);
else if (DBusAdaptor::IsString(value.signature()))
- set = store->SetStringProperty(name, value.reader().get_string(), &e);
+ store->SetStringProperty(name, value.reader().get_string(), &e);
else if (DBusAdaptor::IsStringmap(value.signature()))
- set = store->SetStringmapProperty(name,
- value.operator map<string, string>(),
- &e);
- else if (DBusAdaptor::IsStringmaps(value.signature()))
+ store->SetStringmapProperty(name,
+ value.operator map<string, string>(),
+ &e);
+ else if (DBusAdaptor::IsStringmaps(value.signature())) {
VLOG(1) << " can't yet handle setting type " << value.signature();
- else if (DBusAdaptor::IsStrings(value.signature()))
- set = store->SetStringsProperty(name, value.operator vector<string>(), &e);
+ e.Populate(Error::kInternalError);
+ } else if (DBusAdaptor::IsStrings(value.signature()))
+ store->SetStringsProperty(name, value.operator vector<string>(), &e);
else if (DBusAdaptor::IsUint16(value.signature()))
- set = store->SetUint16Property(name, value.reader().get_uint16(), &e);
+ store->SetUint16Property(name, value.reader().get_uint16(), &e);
else if (DBusAdaptor::IsUint32(value.signature()))
- set = store->SetUint32Property(name, value.reader().get_uint32(), &e);
- else
+ store->SetUint32Property(name, value.reader().get_uint32(), &e);
+ else {
NOTREACHED() << " unknown type: " << value.signature();
-
- if (!set && error) {
- if (!store->Contains(name))
- Error(Error::kInvalidProperty, name + " is invalid.").ToDBusError(error);
- else
- e.ToDBusError(error);
+ e.Populate(Error::kInternalError);
}
- return set;
+
+ if (error != NULL) {
+ e.ToDBusError(error);
+ }
+
+ return e.IsSuccess();
}
// static