library: Rework comparators 41/279141/3
authorKarol Lewandowski <k.lewandowsk@samsung.com>
Tue, 2 Aug 2022 12:04:32 +0000 (14:04 +0200)
committerKarol Lewandowski <k.lewandowsk@samsung.com>
Thu, 4 Aug 2022 22:12:06 +0000 (00:12 +0200)
- use assert() if our internally added data is of correct type (if it's not, it's an
  programming error)
- use explicit typechecked_g_variant_get()

Change-Id: Iad18df2f323b0d9f71edec52dbf46cebe9752a2d

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

index cab546f7caea387313a5384839af0df05c21e48c..b2612da33ede111b9efc3ddfc830610096d095ec 100644 (file)
@@ -281,13 +281,15 @@ static gint g_compare_session_uid(gconstpointer lval, gconstpointer rval)
        assert(lval);
        assert(rval);
 
-       signal_client_data_t *signal_client_data = (signal_client_data_t*)lval;
        int client_session_uid = 0;
-       maybe_g_variant_get_or_ret_diff_(signal_client_data->params, "(i)", &client_session_uid);
+       signal_client_data_t *signal_client_data = (signal_client_data_t*)lval;
+       assert(g_variant_is_of_type(signal_client_data->params, G_VARIANT_TYPE("i")));
+       g_variant_get(signal_client_data->params, "(i)", &client_session_uid);
 
        GVariant *params = (GVariant *)rval;
        int params_session_uid = 0;
-       maybe_g_variant_get_or_ret_diff_(params, "(i)", &params_session_uid);
+       if (!typechecked_g_variant_get(params, "(i)", &params_session_uid))
+               return COMPARATOR_RESULT_DIFFERENT_;
 
        return client_session_uid == params_session_uid ? COMPARATOR_RESULT_SAME_ : COMPARATOR_RESULT_DIFFERENT_;
 }
@@ -297,9 +299,10 @@ static gint g_compare_switch_signal(gconstpointer lval, gconstpointer rval)
        assert(lval);
        assert(rval);
 
-       signal_client_data_t *signal_client_data = (signal_client_data_t*)lval;
        int client_session_uid = 0;
-       maybe_g_variant_get_or_ret_diff_(signal_client_data->params, "(i)", &client_session_uid);
+       signal_client_data_t *signal_client_data = (signal_client_data_t*)lval;
+       assert(g_variant_is_of_type(signal_client_data->params, G_VARIANT_TYPE("i")));
+       g_variant_get(signal_client_data->params, "(i)", &client_session_uid);
 
        GVariant *params = (GVariant *)rval;
        int params_session_uid = 0;
@@ -307,12 +310,12 @@ static gint g_compare_switch_signal(gconstpointer lval, gconstpointer rval)
        g_autofree char* params_prev_user = NULL;
        g_autofree char* params_next_user = NULL;
 
-       maybe_g_variant_get_or_ret_diff_(params, "(ixss)",
+       if (!typechecked_g_variant_get(params, "(ixss)",
                &params_session_uid,
                &params_switch_id,
                &params_prev_user,
-               &params_next_user
-       );
+               &params_next_user))
+               return COMPARATOR_RESULT_DIFFERENT_;
 
        return client_session_uid == params_session_uid ? COMPARATOR_RESULT_SAME_ : COMPARATOR_RESULT_DIFFERENT_;
 }
@@ -322,14 +325,16 @@ static gint g_compare_addremove_signal(gconstpointer lval, gconstpointer rval)
        assert(lval);
        assert(rval);
 
-       signal_client_data_t *signal_client_data = (signal_client_data_t*)lval;
        int client_session_uid = 0;
-       maybe_g_variant_get_or_ret_diff_(signal_client_data->params, "(i)", &client_session_uid);
+       signal_client_data_t *signal_client_data = (signal_client_data_t*)lval;
+       assert(g_variant_is_of_type(signal_client_data->params, G_VARIANT_TYPE("i")));
+       g_variant_get(signal_client_data->params, "(i)", &client_session_uid);
 
        GVariant *params = (GVariant *)rval;
        int params_session_uid = 0;
        g_autofree char *user_id = NULL;
-       maybe_g_variant_get_or_ret_diff_(params, "(is)", &params_session_uid, &user_id);
+       if (!typechecked_g_variant_get(params, "(is)", &params_session_uid, &user_id))
+               return COMPARATOR_RESULT_DIFFERENT_;
 
        return client_session_uid == params_session_uid ? COMPARATOR_RESULT_SAME_ : COMPARATOR_RESULT_DIFFERENT_;
 }
index 8466c5ddd19daba7de8cba425c597a92a716f327..ac496e66db4818175ce7c4f56a77a84e4cbe32e1 100644 (file)
@@ -44,11 +44,6 @@ typedef struct {
 // Implementation note: g_variant_get() returns void, hence ", true"
 #define typechecked_g_variant_get(var, type, args...) (g_variant_is_of_type(var, G_VARIANT_TYPE(type)) ? (g_variant_get(var, type, args), true) : false)
 
-//use when function return err value
-#define maybe_g_variant_get_or_ret_diff_(var, c_str_, args...) \
-       if (!g_variant_is_of_type(var, G_VARIANT_TYPE(c_str_) )) { return COMPARATOR_RESULT_DIFFERENT_ ; } \
-       g_variant_get(var, c_str_, args)
-
 #define int_not_valid(a, ...) || (a <= 0) __VA_ARGS__
 
 #define session_uid_is_not_valid(a, ...) || (a <= 0) __VA_ARGS__