return g_unix_fd_list_steal_fds(fd_list, NULL);
}
-GVariant *dbus_handle_method_with_unix_fd_list_sync_with_reply_var(const char *dest,
+int dbus_handle_method_with_unix_fd_list_sync_with_reply_var(const char *dest,
const char *path,
const char *iface,
const char *method,
GVariant *param,
+ GVariant **reply,
int *in_fdlist,
int in_size,
int **out_fdlist,
int *out_size)
{
+ int ret = 0;
GError *err = NULL;
- GVariant * ret = NULL;
dbus_handle_s *dh = NULL;
GUnixFDList *g_infdlist = NULL;
GUnixFDList *g_outfdlist = NULL;
if (!dest || !path || !iface || !method) {
_E("wrong parameters dest(%s) path(%s) iface(%s) method(%s)", dest, path, iface, method);
- return NULL;
+ return -EINVAL;
}
if (in_fdlist && in_size == 0) {
_E("wrong in_fdlist is not null but in_size is 0");
- return NULL;
+ return -EINVAL;
}
dh = _dbus_handle_get_default_connection();
if (!dh) {
_E("failed to get default connection, bustype:%d", (int)dbus_handle_get_default_bus_type());
- return NULL;
+ return -EAGAIN;
}
/* append fd */
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;
goto out;
}
//g_infdlist = g_unix_fd_list_new();
}
/* send message */
- ret = g_dbus_connection_call_with_unix_fd_list_sync(dh->conn,
+ *reply = 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 (!ret || err) {
+ if (!(*reply) || 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;
goto out;
}
const char *path,
const char *iface,
const char *method,
- GVariant *param)
+ GVariant *param,
+ int *output)
{
- int result;
int ret = 0;
gboolean result_bool;
GVariant *reply = NULL;
if (!dest || !path || !iface || !method) {
_E("wrong parameters dest(%s) path(%s) iface(%s) method(%s)", dest, path, iface, method);
- return -1;
+ return -EINVAL;
}
ret = dbus_handle_method_sync_with_reply_var(dest, path, iface, method, param, &reply);
return -ECOMM;
if (g_strcmp0("(i)", g_variant_get_type_string(reply)) == 0) {
- g_variant_get(reply, "(i)", &result);
+ g_variant_get(reply, "(i)", output);
} else if (g_strcmp0("(b)", g_variant_get_type_string(reply)) == 0) {
g_variant_get(reply, "(b)", &result_bool);
- result = (int)result_bool;
+ *output = (int)result_bool;
} else {
- result = -ENOMSG;
+ ret = -ENOMSG;
}
g_variant_unref(reply);
- return result;
+ return ret;
}
int dbus_handle_method_async_var(const char *dest,