diff options
author | Thomas Haller <thaller@redhat.com> | 2018-10-04 01:09:10 +0200 |
---|---|---|
committer | Aleksander Morgado <aleksander@aleksander.es> | 2018-10-04 09:43:05 +0200 |
commit | d83f50794dd3525c0c3aedf565066a6ba8fd6d73 (patch) | |
tree | 931262f4f84a79b4239186f5351546f3087bb320 | |
parent | a68bbbc1b98b5c2ec90969a7f70196352617c03d (diff) | |
download | ModemManager-d83f50794dd3525c0c3aedf565066a6ba8fd6d73.tar.gz |
libmm-glib, modem-helpers: unref enum/flags GType classes in enum getters
-rw-r--r-- | libmm-glib/mm-common-helpers.c | 60 | ||||
-rw-r--r-- | src/mm-modem-helpers.c | 10 |
2 files changed, 58 insertions, 12 deletions
diff --git a/libmm-glib/mm-common-helpers.c b/libmm-glib/mm-common-helpers.c index 3470f64f5..ed459c5af 100644 --- a/libmm-glib/mm-common-helpers.c +++ b/libmm-glib/mm-common-helpers.c @@ -25,6 +25,26 @@ #include "mm-errors-types.h" #include "mm-common-helpers.h" +static int +_enum_class_return_value (GEnumClass *enum_class, guint i) +{ + int value; + + value = enum_class->values[i].value; + g_type_class_unref (enum_class); + return value; +} + +static int +_flags_class_return_value (GFlagsClass *flags_class, guint i) +{ + guint value; + + value = flags_class->values[i].value; + g_type_class_unref (flags_class); + return value; +} + gchar * mm_common_build_capabilities_string (const MMModemCapability *capabilities, guint n_capabilities) @@ -795,9 +815,11 @@ mm_common_get_eps_ue_mode_operation_from_string (const gchar *str, for (i = 0; enum_class->values[i].value_nick; i++) { if (!g_ascii_strcasecmp (str, enum_class->values[i].value_nick)) - return enum_class->values[i].value; + return _enum_class_return_value (enum_class, i); } + g_type_class_unref (enum_class); + g_set_error (error, MM_CORE_ERROR, MM_CORE_ERROR_INVALID_ARGS, @@ -914,9 +936,11 @@ mm_common_get_rm_protocol_from_string (const gchar *str, for (i = 0; enum_class->values[i].value_nick; i++) { if (!g_ascii_strcasecmp (str, enum_class->values[i].value_nick)) - return enum_class->values[i].value; + return _enum_class_return_value (enum_class, i); } + g_type_class_unref (enum_class); + g_set_error (error, MM_CORE_ERROR, MM_CORE_ERROR_INVALID_ARGS, @@ -936,9 +960,11 @@ mm_common_get_ip_type_from_string (const gchar *str, for (i = 0; flags_class->values[i].value_nick; i++) { if (!g_ascii_strcasecmp (str, flags_class->values[i].value_nick)) - return flags_class->values[i].value; + return _flags_class_return_value (flags_class, i); } + g_type_class_unref (flags_class); + g_set_error (error, MM_CORE_ERROR, MM_CORE_ERROR_INVALID_ARGS, @@ -1008,9 +1034,11 @@ mm_common_get_sms_storage_from_string (const gchar *str, for (i = 0; enum_class->values[i].value_nick; i++) { if (!g_ascii_strcasecmp (str, enum_class->values[i].value_nick)) - return enum_class->values[i].value; + return _enum_class_return_value (enum_class, i); } + g_type_class_unref (enum_class); + g_set_error (error, MM_CORE_ERROR, MM_CORE_ERROR_INVALID_ARGS, @@ -1030,9 +1058,11 @@ mm_common_get_sms_cdma_teleservice_id_from_string (const gchar *str, for (i = 0; enum_class->values[i].value_nick; i++) { if (!g_ascii_strcasecmp (str, enum_class->values[i].value_nick)) - return enum_class->values[i].value; + return _enum_class_return_value (enum_class, i); } + g_type_class_unref (enum_class); + g_set_error (error, MM_CORE_ERROR, MM_CORE_ERROR_INVALID_ARGS, @@ -1052,9 +1082,11 @@ mm_common_get_sms_cdma_service_category_from_string (const gchar *str, for (i = 0; enum_class->values[i].value_nick; i++) { if (!g_ascii_strcasecmp (str, enum_class->values[i].value_nick)) - return enum_class->values[i].value; + return _enum_class_return_value (enum_class, i); } + g_type_class_unref (enum_class); + g_set_error (error, MM_CORE_ERROR, MM_CORE_ERROR_INVALID_ARGS, @@ -1074,9 +1106,11 @@ mm_common_get_call_direction_from_string (const gchar *str, for (i = 0; enum_class->values[i].value_nick; i++) { if (!g_ascii_strcasecmp (str, enum_class->values[i].value_nick)) - return enum_class->values[i].value; + return _enum_class_return_value (enum_class, i); } + g_type_class_unref (enum_class); + g_set_error (error, MM_CORE_ERROR, MM_CORE_ERROR_INVALID_ARGS, @@ -1096,9 +1130,11 @@ mm_common_get_call_state_from_string (const gchar *str, for (i = 0; enum_class->values[i].value_nick; i++) { if (!g_ascii_strcasecmp (str, enum_class->values[i].value_nick)) - return enum_class->values[i].value; + return _enum_class_return_value (enum_class, i); } + g_type_class_unref (enum_class); + g_set_error (error, MM_CORE_ERROR, MM_CORE_ERROR_INVALID_ARGS, @@ -1118,9 +1154,11 @@ mm_common_get_call_state_reason_from_string (const gchar *str, for (i = 0; enum_class->values[i].value_nick; i++) { if (!g_ascii_strcasecmp (str, enum_class->values[i].value_nick)) - return enum_class->values[i].value; + return _enum_class_return_value (enum_class, i); } + g_type_class_unref (enum_class); + g_set_error (error, MM_CORE_ERROR, MM_CORE_ERROR_INVALID_ARGS, @@ -1190,9 +1228,11 @@ mm_common_get_oma_session_type_from_string (const gchar *str, for (i = 0; enum_class->values[i].value_nick; i++) { if (!g_ascii_strcasecmp (str, enum_class->values[i].value_nick)) - return enum_class->values[i].value; + return _enum_class_return_value (enum_class, i); } + g_type_class_unref (enum_class); + g_set_error (error, MM_CORE_ERROR, MM_CORE_ERROR_INVALID_ARGS, diff --git a/src/mm-modem-helpers.c b/src/mm-modem-helpers.c index 35465d919..a1c7e9a26 100644 --- a/src/mm-modem-helpers.c +++ b/src/mm-modem-helpers.c @@ -652,15 +652,21 @@ mm_flow_control_from_string (const gchar *str, GError **error) { GFlagsClass *flags_class; + guint value; guint i; flags_class = G_FLAGS_CLASS (g_type_class_ref (MM_TYPE_FLOW_CONTROL)); for (i = 0; flags_class->values[i].value_nick; i++) { - if (!g_ascii_strcasecmp (str, flags_class->values[i].value_nick)) - return flags_class->values[i].value; + if (!g_ascii_strcasecmp (str, flags_class->values[i].value_nick)) { + value = flags_class->values[i].value; + g_type_class_unref (flags_class); + return value; + } } + g_type_class_unref (flags_class); + g_set_error (error, MM_CORE_ERROR, MM_CORE_ERROR_INVALID_ARGS, |