GVariant **reply)
{
GError *err = NULL;
- int ret = 0;
+ GVariant *ret = NULL;
+ int err_val = 0;
dbus_handle_s *dh = NULL;
if (!dest || !path || !iface || !method) {
return -ECOMM;
}
- *reply = g_dbus_connection_call_sync(dh->conn,
+ ret = g_dbus_connection_call_sync(dh->conn,
dest, path, iface, method,
param, NULL,
G_DBUS_CALL_FLAGS_NONE,
DBUS_REPLY_TIMEOUT,
NULL,
&err);
- if (!(*reply) || err) {
+ if (!ret || err) {
if (err) {
_E("failed to g_dbus_connection_call_sync:%s", err->message);
if (g_error_matches(err, G_DBUS_ERROR, G_DBUS_ERROR_ACCESS_DENIED))
- ret = -EPERM;
+ err_val = -EPERM;
else
- ret = -ECOMM;
+ err_val = -ECOMM;
g_error_free(err);
- return ret;
+ return err_val;
} else {
_E("failed to g_dbus_connection_call_sync");
}
return -ECOMM;
}
- return ret;
+ if(reply)
+ *reply = ret;
+ else
+ g_variant_unref(ret);
+
+ return err_val;
}
int dbus_handle_method_sync_with_reply_var_timeout(const char *dest, const char *path,
const char *iface, const char *method, GVariant *param, GVariant **reply, int timeout)
{
GError *err = NULL;
+ GVariant *ret;
dbus_handle_s *dh = NULL;
if (!dest || !path || !iface || !method) {
return -ECOMM;
}
- *reply = g_dbus_connection_call_sync(dh->conn,
+ ret = g_dbus_connection_call_sync(dh->conn,
dest, path, iface, method,
param, NULL,
G_DBUS_CALL_FLAGS_NONE,
timeout,
NULL,
&err);
- if (!(*reply) || err) {
+ if (!ret || err) {
if (err) {
_E("failed to g_dbus_connection_call_sync:%s", err->message);
g_error_free(err);
return -ECOMM;
}
+ if(reply)
+ *reply = ret;
+ else
+ g_variant_unref(ret);
+
return 0;
}
int **out_fdlist,
int *out_size)
{
- int ret = 0;
+ int err_val = 0;
+ GVariant *ret = NULL;
GError *err = NULL;
dbus_handle_s *dh = NULL;
GUnixFDList *g_infdlist = NULL;
g_infdlist = g_unix_fd_list_new_from_array(in_fdlist, in_size);
if (!g_infdlist) {
_E("failed to g_unix_fd_list_new_from_array\n");
- ret = -EAGAIN;
+ err_val = -EAGAIN;
goto out;
}
//g_infdlist = g_unix_fd_list_new();
}
/* send message */
- *reply = g_dbus_connection_call_with_unix_fd_list_sync(dh->conn,
+ ret = g_dbus_connection_call_with_unix_fd_list_sync(dh->conn,
dest, path, iface, method,
param, NULL,
G_DBUS_CALL_FLAGS_NONE,
-1,
g_infdlist, &g_outfdlist,
NULL, &err);
- if (!(*reply) || err) {
+ if (!ret || err) {
if (err) {
_E("failed to g_dbus_connection_call_with_unix_fd_list_sync:%s", err->message);
g_error_free(err);
if (g_infdlist)
g_object_unref(g_infdlist);
}
- ret = -EAGAIN;
+ err_val = -EAGAIN;
goto out;
}
+ if(reply)
+ *reply = ret;
+ else
+ g_variant_unref(ret);
+
/* copy fds to out array */
if (g_outfdlist) {
*out_size = g_unix_fd_list_get_length(g_outfdlist);
out:
if (g_outfdlist)
g_object_unref(g_outfdlist);
- return ret;
+ return err_val;
}
int dbus_handle_method_sync_var(const char *dest,
int *output)
{
int ret = 0;
+ int result;
gboolean result_bool;
GVariant *reply = NULL;
return -ECOMM;
if (g_strcmp0("(i)", g_variant_get_type_string(reply)) == 0) {
- g_variant_get(reply, "(i)", output);
+ g_variant_get(reply, "(i)", &result);
+ if(output)
+ *output = result;
} else if (g_strcmp0("(b)", g_variant_get_type_string(reply)) == 0) {
g_variant_get(reply, "(b)", &result_bool);
- *output = (int)result_bool;
+ if(output)
+ *output = (int)result_bool;
} else {
ret = -ENOMSG;
}