library: Use generic method_call() in get_current_user() API 39/279139/3
authorKarol Lewandowski <k.lewandowsk@samsung.com>
Mon, 1 Aug 2022 23:27:42 +0000 (01:27 +0200)
committerKarol Lewandowski <k.lewandowsk@samsung.com>
Thu, 4 Aug 2022 22:12:06 +0000 (00:12 +0200)
Change-Id: I6973fc7f414edb65251c8c6f90cb1d06f1a98525

libsessiond/src/lib.c
libsessiond/src/lib.h

index 2ae8d15..0fdf290 100644 (file)
@@ -865,40 +865,26 @@ EXPORT_API int subsession_get_user_list(int session_uid, subsession_user_t **use
        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;
index a57d81d..a7fc619 100644 (file)
@@ -131,11 +131,6 @@ typedef struct {
 #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