Chromium Code Reviews| Index: chromeos_login.cc |
| diff --git a/chromeos_login.cc b/chromeos_login.cc |
| index 201eac93a2391ae08164dc2aa6f307bef1bc4401..dbfb035e44c792887f85d68d58a1c92c07ce8bf1 100644 |
| --- a/chromeos_login.cc |
| +++ b/chromeos_login.cc |
| @@ -229,6 +229,8 @@ bool ChromeOSRetrievePropertySafe(const char* name, Property** OUT_property) { |
| if (!ChromeOSLoginHelpers::RetrievePropertyHelper(name, &value, &sig)) |
| return false; |
| *OUT_property = ChromeOSLoginHelpers::CreateProperty(name, value, sig); |
| + g_array_free(sig, false); |
| + g_free(value); |
| return true; |
| } |
| @@ -463,18 +465,22 @@ void RetrievePolicyNotify(DBusGProxy* gproxy, |
| reinterpret_cast<CallbackData<RetrievePolicyCallback>*>(user_data); |
| DCHECK(cb_data); |
| glib::ScopedError error; |
| - gchar* policy_blob = NULL; |
| + GArray* policy_blob = NULL; |
| if (!::dbus_g_proxy_end_call(gproxy, |
| call_id, |
| &Resetter(&error).lvalue(), |
| - G_TYPE_STRING, &policy_blob, |
| + DBUS_TYPE_G_UCHAR_ARRAY, &policy_blob, |
| G_TYPE_INVALID)) { |
| LOG(ERROR) << login_manager::kSessionManagerRetrievePolicy |
| << " failed: " << SCOPED_SAFE_MESSAGE(error); |
| } |
| - cb_data->callback(cb_data->object, policy_blob); |
| - if (policy_blob) |
| - g_free(policy_blob); |
| + if (policy_blob) { |
| + std::string policy(policy_blob->data, policy_blob->len); |
| + cb_data->callback(cb_data->object, policy.c_str()); |
| + g_array_free(policy_blob, TRUE); |
| + } else { |
| + cb_data->callback(cb_data->object, NULL); |
| + } |
| } |
| extern "C" |
| @@ -522,19 +528,24 @@ void ChromeOSStorePolicy(const char* prop, |
| DCHECK(delegate); |
|
stevenjb
2011/03/30 14:27:11
nit: DCHECK(prop)
Chris Masone
2011/03/30 16:43:29
Done.
|
| CallbackData<StorePolicyCallback>* cb_data = |
| new CallbackData<StorePolicyCallback>(callback, delegate); |
| + GArray* policy = g_array_new(FALSE, FALSE, 1); |
| + policy->data = const_cast<gchar*>(prop); // This just gets copied below. |
| + policy->len = strlen(prop); |
| + //g_array_append_vals(policy, prop, strlen(prop)); |
|
stevenjb
2011/03/30 14:27:11
Delete, or comment if you want to keep this for re
Chris Masone
2011/03/30 16:43:29
Done.
|
| DBusGProxyCall* call_id = |
| ::dbus_g_proxy_begin_call(cb_data->proxy.gproxy(), |
| login_manager::kSessionManagerStorePolicy, |
| &StorePolicyNotify, |
| cb_data, |
| &DeleteCallbackData<StorePolicyCallback>, |
| - G_TYPE_STRING, prop, |
| + DBUS_TYPE_G_UCHAR_ARRAY, policy, |
| G_TYPE_INVALID); |
| if (!call_id) { |
| LOG(ERROR) << "StorePolicy async call failed"; |
| delete cb_data; |
| callback(delegate, false); |
| } |
| + g_array_free(policy, FALSE); |
| } |
| } // namespace chromeos |