From: Karol Lewandowski Date: Tue, 2 Aug 2022 12:04:32 +0000 (+0200) Subject: library: Rework comparators X-Git-Tag: submit/tizen/20220805.114215~1 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=9d61610e18bdec60b33217c12f7e56d9109a167c;p=platform%2Fcore%2Fsystem%2Fsessiond.git library: Rework comparators - 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 --- diff --git a/libsessiond/src/lib.c b/libsessiond/src/lib.c index cab546f..b2612da 100644 --- a/libsessiond/src/lib.c +++ b/libsessiond/src/lib.c @@ -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)", ¶ms_session_uid); + if (!typechecked_g_variant_get(params, "(i)", ¶ms_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)", ¶ms_session_uid, ¶ms_switch_id, ¶ms_prev_user, - ¶ms_next_user - ); + ¶ms_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)", ¶ms_session_uid, &user_id); + if (!typechecked_g_variant_get(params, "(is)", ¶ms_session_uid, &user_id)) + return COMPARATOR_RESULT_DIFFERENT_; return client_session_uid == params_session_uid ? COMPARATOR_RESULT_SAME_ : COMPARATOR_RESULT_DIFFERENT_; } diff --git a/libsessiond/src/lib.h b/libsessiond/src/lib.h index 8466c5d..ac496e6 100644 --- a/libsessiond/src/lib.h +++ b/libsessiond/src/lib.h @@ -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__