return SUBSESSION_ERROR_NONE;
}
-EXPORT_API int subsession_get_current_user(int session_uid, subsession_user_t user) {
-
+EXPORT_API int subsession_get_current_user(int session_uid, subsession_user_t user)
+{
return_if(session_uid_is_not_valid(session_uid, current_user_ptr_is_null(user)))
- MAKE_SURE_CONNECTION_IS_NOT_NULL();
-
- GVariant *params = g_variant_new("(i)", session_uid);
- if (params == NULL) {
- return_with_log_error_result_(SUBSESSION_ERROR_OUT_OF_MEMORY)
- }
-
- GError *call_sync_error = NULL;
- g_autoptr(GVariant) retgv = g_dbus_connection_call_sync(conn_config_,
- dbus_method_call.GetCurrentUser,
- params,
- NULL,
- G_DBUS_CALL_FLAGS_NONE,
- libsessiond_default_timeout,
- NULL,
- &call_sync_error);
+ g_autoptr(GVariant) out = NULL;
+ int ret = method_call_sync(dbus_method_call.GetCurrentUser,
+ g_variant_new("(i)", session_uid),
+ G_VARIANT_TYPE("(s)"),
+ &out
+ );
- if (!retgv || call_sync_error) {
- LOGE("Dbus error: %s for method: %s", g_dbus_error_get_remote_error(call_sync_error), dbus_method_call.GetCurrentUser);
- int ret = map_dbus_call_error_to_return_value(call_sync_error);
- g_error_free(call_sync_error);
- log_if_error_(ret);
+ if (ret != SUBSESSION_ERROR_NONE)
return ret;
- }
g_autofree char *get_user = NULL;
- maybe_g_variant_get_or_error_invalid(retgv,"(s)", &get_user);
- if (get_user == NULL) {
- return_with_log_error_result_(SUBSESSION_ERROR_OUT_OF_MEMORY);
+ if (!typechecked_g_variant_get(out, "(s)", &get_user) || !get_user) {
+ LOGE("DBus method %s returned incorrect %s", dbus_method_call.GetCurrentUser, !get_user ? "value" : "type");
+ return SUBSESSION_ERROR_IO_ERROR;
}
+
subsession_user_copy(user, get_user);
return SUBSESSION_ERROR_NONE;
#define maybe_not_comparable_if(a) diff_if_not_compared_(a, COMPARATOR_RESULT_DIFFERENT_)
#define return_if(a) error_if(a, SUBSESSION_ERROR_INVALID_PARAMETER)
-#define maybe_g_variant_get_or_error_invalid(var, c_str_, args...) \
- if (!g_variant_is_of_type(var, G_VARIANT_TYPE(c_str_) )) { log_if_error_( SUBSESSION_ERROR_INVALID_PARAMETER) \
- return SUBSESSION_ERROR_INVALID_PARAMETER; } \
- g_variant_get(var, c_str_, args)
-
#ifdef __cplusplus
}
#endif