diff options
Diffstat (limited to 'plugins')
25 files changed, 520 insertions, 739 deletions
diff --git a/plugins/anydata/mm-broadband-modem-anydata.c b/plugins/anydata/mm-broadband-modem-anydata.c index 95f8cbd2..36d72e56 100644 --- a/plugins/anydata/mm-broadband-modem-anydata.c +++ b/plugins/anydata/mm-broadband-modem-anydata.c @@ -72,10 +72,10 @@ hstate_ready (MMIfaceModemCdma *self, GTask *task) { DetailedRegistrationStateResults *results; - GError *error = NULL; - const gchar *response; - GRegex *r; - GMatchInfo *match_info; + GError *error = NULL; + const gchar *response; + g_autoptr(GRegex) r = NULL; + g_autoptr(GMatchInfo) match_info = NULL; results = g_task_get_task_data (task); @@ -129,9 +129,6 @@ hstate_ready (MMIfaceModemCdma *self, } } - g_match_info_free (match_info); - g_regex_unref (r); - g_task_return_pointer (task, g_memdup (results, sizeof (*results)), g_free); g_object_unref (task); } @@ -142,10 +139,10 @@ state_ready (MMIfaceModemCdma *self, GTask *task) { DetailedRegistrationStateResults *results; - GError *error = NULL; - const gchar *response; - GRegex *r; - GMatchInfo *match_info; + GError *error = NULL; + const gchar *response; + g_autoptr(GRegex) r = NULL; + g_autoptr(GMatchInfo) match_info = NULL; response = mm_base_modem_at_command_finish (MM_BASE_MODEM (self), res, &error); if (error) { @@ -194,9 +191,6 @@ state_ready (MMIfaceModemCdma *self, } } - g_match_info_free (match_info); - g_regex_unref (r); - /* Try for EVDO state too */ mm_base_modem_at_command (MM_BASE_MODEM (self), "*HSTATE?", @@ -261,9 +255,14 @@ reset (MMIfaceModem *self, static void setup_ports (MMBroadbandModem *self) { - MMPortSerialAt *ports[2]; - GRegex *regex; - guint i; + MMPortSerialAt *ports[2]; + g_autoptr(GRegex) active_regex = NULL; + g_autoptr(GRegex) inactive_regex = NULL; + g_autoptr(GRegex) dormant_regex = NULL; + g_autoptr(GRegex) offline_regex = NULL; + g_autoptr(GRegex) regreq_regex = NULL; + g_autoptr(GRegex) authreq_regex = NULL; + guint i; /* Call parent's setup ports first always */ MM_BROADBAND_MODEM_CLASS (mm_broadband_modem_anydata_parent_class)->setup_ports (self); @@ -271,48 +270,37 @@ setup_ports (MMBroadbandModem *self) ports[0] = mm_base_modem_peek_port_primary (MM_BASE_MODEM (self)); ports[1] = mm_base_modem_peek_port_secondary (MM_BASE_MODEM (self)); + /* Data call has connected */ + active_regex = g_regex_new ("\\r\\n\\*ACTIVE:(.*)\\r\\n", G_REGEX_RAW | G_REGEX_OPTIMIZE, 0, NULL); + /* Data call disconnected */ + inactive_regex = g_regex_new ("\\r\\n\\*INACTIVE:(.*)\\r\\n", G_REGEX_RAW | G_REGEX_OPTIMIZE, 0, NULL); + /* Modem is now dormant */ + dormant_regex = g_regex_new ("\\r\\n\\*DORMANT:(.*)\\r\\n", G_REGEX_RAW | G_REGEX_OPTIMIZE, 0, NULL); + /* Network acquisition fail */ + offline_regex = g_regex_new ("\\r\\n\\*OFFLINE:(.*)\\r\\n", G_REGEX_RAW | G_REGEX_OPTIMIZE, 0, NULL); + /* Registration fail */ + regreq_regex = g_regex_new ("\\r\\n\\*REGREQ:(.*)\\r\\n", G_REGEX_RAW | G_REGEX_OPTIMIZE, 0, NULL); + /* Authentication fail */ + authreq_regex = g_regex_new ("\\r\\n\\*AUTHREQ:(.*)\\r\\n", G_REGEX_RAW | G_REGEX_OPTIMIZE, 0, NULL); + /* Now reset the unsolicited messages */ for (i = 0; i < G_N_ELEMENTS (ports); i++) { if (!ports[i]) continue; /* Data state notifications */ - - /* Data call has connected */ - regex = g_regex_new ("\\r\\n\\*ACTIVE:(.*)\\r\\n", G_REGEX_RAW | G_REGEX_OPTIMIZE, 0, NULL); - mm_port_serial_at_add_unsolicited_msg_handler (MM_PORT_SERIAL_AT (ports[i]), regex, NULL, NULL, NULL); - g_regex_unref (regex); - - /* Data call disconnected */ - regex = g_regex_new ("\\r\\n\\*INACTIVE:(.*)\\r\\n", G_REGEX_RAW | G_REGEX_OPTIMIZE, 0, NULL); - mm_port_serial_at_add_unsolicited_msg_handler (MM_PORT_SERIAL_AT (ports[i]), regex, NULL, NULL, NULL); - g_regex_unref (regex); - - /* Modem is now dormant */ - regex = g_regex_new ("\\r\\n\\*DORMANT:(.*)\\r\\n", G_REGEX_RAW | G_REGEX_OPTIMIZE, 0, NULL); - mm_port_serial_at_add_unsolicited_msg_handler (MM_PORT_SERIAL_AT (ports[i]), regex, NULL, NULL, NULL); - g_regex_unref (regex); + mm_port_serial_at_add_unsolicited_msg_handler (MM_PORT_SERIAL_AT (ports[i]), active_regex, NULL, NULL, NULL); + mm_port_serial_at_add_unsolicited_msg_handler (MM_PORT_SERIAL_AT (ports[i]), inactive_regex, NULL, NULL, NULL); + mm_port_serial_at_add_unsolicited_msg_handler (MM_PORT_SERIAL_AT (ports[i]), dormant_regex, NULL, NULL, NULL); /* Abnormal state notifications * * FIXME: set 1X/EVDO registration state to UNKNOWN when these * notifications are received? */ - - /* Network acquisition fail */ - regex = g_regex_new ("\\r\\n\\*OFFLINE:(.*)\\r\\n", G_REGEX_RAW | G_REGEX_OPTIMIZE, 0, NULL); - mm_port_serial_at_add_unsolicited_msg_handler (MM_PORT_SERIAL_AT (ports[i]), regex, NULL, NULL, NULL); - g_regex_unref (regex); - - /* Registration fail */ - regex = g_regex_new ("\\r\\n\\*REGREQ:(.*)\\r\\n", G_REGEX_RAW | G_REGEX_OPTIMIZE, 0, NULL); - mm_port_serial_at_add_unsolicited_msg_handler (MM_PORT_SERIAL_AT (ports[i]), regex, NULL, NULL, NULL); - g_regex_unref (regex); - - /* Authentication fail */ - regex = g_regex_new ("\\r\\n\\*AUTHREQ:(.*)\\r\\n", G_REGEX_RAW | G_REGEX_OPTIMIZE, 0, NULL); - mm_port_serial_at_add_unsolicited_msg_handler (MM_PORT_SERIAL_AT (ports[i]), regex, NULL, NULL, NULL); - g_regex_unref (regex); + mm_port_serial_at_add_unsolicited_msg_handler (MM_PORT_SERIAL_AT (ports[i]), offline_regex, NULL, NULL, NULL); + mm_port_serial_at_add_unsolicited_msg_handler (MM_PORT_SERIAL_AT (ports[i]), regreq_regex, NULL, NULL, NULL); + mm_port_serial_at_add_unsolicited_msg_handler (MM_PORT_SERIAL_AT (ports[i]), authreq_regex, NULL, NULL, NULL); } } diff --git a/plugins/cinterion/mm-modem-helpers-cinterion.c b/plugins/cinterion/mm-modem-helpers-cinterion.c index a75eb530..0bf3a078 100644 --- a/plugins/cinterion/mm-modem-helpers-cinterion.c +++ b/plugins/cinterion/mm-modem-helpers-cinterion.c @@ -554,14 +554,14 @@ mm_cinterion_parse_cnmi_test (const gchar *response, GArray **supported_bfr, GError **error) { - GRegex *r; - GMatchInfo *match_info; - GError *inner_error = NULL; - GArray *tmp_supported_mode = NULL; - GArray *tmp_supported_mt = NULL; - GArray *tmp_supported_bm = NULL; - GArray *tmp_supported_ds = NULL; - GArray *tmp_supported_bfr = NULL; + g_autoptr(GRegex) r = NULL; + g_autoptr(GMatchInfo) match_info = NULL; + GError *inner_error = NULL; + GArray *tmp_supported_mode = NULL; + GArray *tmp_supported_mt = NULL; + GArray *tmp_supported_bm = NULL; + GArray *tmp_supported_ds = NULL; + GArray *tmp_supported_bfr = NULL; if (!response) { g_set_error (error, MM_CORE_ERROR, MM_CORE_ERROR_FAILED, "Missing response"); @@ -576,57 +576,48 @@ mm_cinterion_parse_cnmi_test (const gchar *response, g_regex_match_full (r, response, strlen (response), 0, 0, &match_info, &inner_error); if (!inner_error && g_match_info_matches (match_info)) { if (supported_mode) { - gchar *str; + g_autofree gchar *str = NULL; str = mm_get_string_unquoted_from_match_info (match_info, 1); tmp_supported_mode = mm_parse_uint_list (str, &inner_error); - g_free (str); if (inner_error) goto out; } if (supported_mt) { - gchar *str; + g_autofree gchar *str = NULL; str = mm_get_string_unquoted_from_match_info (match_info, 2); tmp_supported_mt = mm_parse_uint_list (str, &inner_error); - g_free (str); if (inner_error) goto out; } if (supported_bm) { - gchar *str; + g_autofree gchar *str = NULL; str = mm_get_string_unquoted_from_match_info (match_info, 3); tmp_supported_bm = mm_parse_uint_list (str, &inner_error); - g_free (str); if (inner_error) goto out; } if (supported_ds) { - gchar *str; + g_autofree gchar *str = NULL; str = mm_get_string_unquoted_from_match_info (match_info, 4); tmp_supported_ds = mm_parse_uint_list (str, &inner_error); - g_free (str); if (inner_error) goto out; } if (supported_bfr) { - gchar *str; + g_autofree gchar *str = NULL; str = mm_get_string_unquoted_from_match_info (match_info, 5); tmp_supported_bfr = mm_parse_uint_list (str, &inner_error); - g_free (str); if (inner_error) goto out; } } out: - - g_match_info_free (match_info); - g_regex_unref (r); - if (inner_error) { g_clear_pointer (&tmp_supported_mode, g_array_unref); g_clear_pointer (&tmp_supported_mt, g_array_unref); @@ -763,9 +754,9 @@ mm_cinterion_parse_sind_response (const gchar *response, guint *value, GError **error) { - GRegex *r; - GMatchInfo *match_info; - guint errors = 0; + g_autoptr(GRegex) r = NULL; + g_autoptr(GMatchInfo) match_info = NULL; + guint errors = 0; if (!response) { g_set_error (error, MM_CORE_ERROR, MM_CORE_ERROR_FAILED, "Missing response"); @@ -788,9 +779,6 @@ mm_cinterion_parse_sind_response (const gchar *response, } else errors++; - g_match_info_free (match_info); - g_regex_unref (r); - if (errors > 0) { g_set_error (error, MM_CORE_ERROR, MM_CORE_ERROR_FAILED, "Failed parsing ^SIND response"); return FALSE; @@ -836,8 +824,8 @@ mm_cinterion_parse_swwan_response (const gchar *response, gpointer log_object, GError **error) { - GRegex *r; - GMatchInfo *match_info; + g_autoptr(GRegex) r = NULL; + g_autoptr(GMatchInfo) match_info = NULL; GError *inner_error = NULL; MMBearerConnectionStatus status; @@ -883,9 +871,6 @@ mm_cinterion_parse_swwan_response (const gchar *response, g_match_info_next (match_info, &inner_error); } - g_match_info_free (match_info); - g_regex_unref (r); - if (status == MM_BEARER_CONNECTION_STATUS_UNKNOWN) g_set_error (error, MM_CORE_ERROR, MM_CORE_ERROR_FAILED, "No state returned for CID %u", cid); @@ -1078,10 +1063,10 @@ mm_cinterion_parse_slcc_list (const gchar *str, GList **out_list, GError **error) { - GRegex *r; - GList *list = NULL; - GError *inner_error = NULL; - GMatchInfo *match_info = NULL; + g_autoptr(GRegex) r = NULL; + g_autoptr(GMatchInfo) match_info = NULL; + GList *list = NULL; + GError *inner_error = NULL; static const MMCallDirection cinterion_call_direction[] = { [0] = MM_CALL_DIRECTION_OUTGOING, @@ -1158,9 +1143,6 @@ mm_cinterion_parse_slcc_list (const gchar *str, } out: - g_clear_pointer (&match_info, g_match_info_free); - g_regex_unref (r); - if (inner_error) { mm_cinterion_call_info_list_free (list); g_propagate_error (error, inner_error); diff --git a/plugins/cinterion/tests/test-modem-helpers-cinterion.c b/plugins/cinterion/tests/test-modem-helpers-cinterion.c index c3e7e9e5..8332700b 100644 --- a/plugins/cinterion/tests/test-modem-helpers-cinterion.c +++ b/plugins/cinterion/tests/test-modem-helpers-cinterion.c @@ -1192,18 +1192,17 @@ test_smong_response_no_match (void) /* Test ^SLCC URCs */ static void -common_test_slcc_urc (const gchar *urc, +common_test_slcc_urc (const gchar *urc, const MMCallInfo *expected_call_info_list, - guint expected_call_info_list_size) + guint expected_call_info_list_size) { - GError *error = NULL; - GRegex *slcc_regex = NULL; - gboolean result; - GMatchInfo *match_info = NULL; - gchar *str; - GList *call_info_list = NULL; - GList *l; - + g_autoptr(GRegex) slcc_regex = NULL; + g_autoptr(GMatchInfo) match_info = NULL; + g_autofree gchar *str = NULL; + GError *error = NULL; + GList *call_info_list = NULL; + GList *l; + gboolean result; slcc_regex = mm_cinterion_get_slcc_regex (); @@ -1230,8 +1229,8 @@ common_test_slcc_urc (const gchar *urc, for (l = call_info_list; l; l = g_list_next (l)) { const MMCallInfo *call_info = (const MMCallInfo *)(l->data); - gboolean found = FALSE; - guint i; + gboolean found = FALSE; + guint i; g_debug ("call at index %u: direction %s, state %s, number %s", call_info->index, @@ -1248,10 +1247,6 @@ common_test_slcc_urc (const gchar *urc, g_assert (found); } - g_match_info_free (match_info); - g_regex_unref (slcc_regex); - g_free (str); - mm_cinterion_call_info_list_free (call_info_list); } @@ -1322,12 +1317,12 @@ common_test_ctzu_urc (const gchar *urc, gint expected_offset, gint expected_dst_offset) { - GError *error = NULL; - GRegex *ctzu_regex = NULL; - gboolean result; - GMatchInfo *match_info = NULL; - gchar *iso8601; - MMNetworkTimezone *tz = NULL; + g_autoptr(GRegex) ctzu_regex = NULL; + g_autoptr(GMatchInfo) match_info = NULL; + g_autofree gchar *iso8601 = NULL; + GError *error = NULL; + gboolean result; + MMNetworkTimezone *tz = NULL; ctzu_regex = mm_cinterion_get_ctzu_regex (); @@ -1342,7 +1337,6 @@ common_test_ctzu_urc (const gchar *urc, g_assert (iso8601); g_assert_cmpstr (expected_iso8601, ==, iso8601); - g_free (iso8601); g_assert (tz); g_assert_cmpint (expected_offset, ==, mm_network_timezone_get_offset (tz)); @@ -1351,8 +1345,6 @@ common_test_ctzu_urc (const gchar *urc, g_assert_cmpuint ((guint)expected_dst_offset, ==, mm_network_timezone_get_dst_offset (tz)); g_object_unref (tz); - g_match_info_free (match_info); - g_regex_unref (ctzu_regex); } static void diff --git a/plugins/huawei/mm-broadband-modem-huawei.c b/plugins/huawei/mm-broadband-modem-huawei.c index 866707d6..c7c68b9f 100644 --- a/plugins/huawei/mm-broadband-modem-huawei.c +++ b/plugins/huawei/mm-broadband-modem-huawei.c @@ -627,12 +627,13 @@ load_unlock_retries_finish (MMIfaceModem *self, GAsyncResult *res, GError **error) { - MMUnlockRetries *unlock_retries; - const gchar *result; - GRegex *r; - GMatchInfo *match_info = NULL; - GError *match_error = NULL; - guint i; + g_autoptr(GRegex) r = NULL; + g_autoptr(GMatchInfo) match_info = NULL; + MMUnlockRetries *unlock_retries; + const gchar *result; + GError *match_error = NULL; + guint i; + MMModemLock locks[4] = { MM_MODEM_LOCK_SIM_PUK, MM_MODEM_LOCK_SIM_PIN, @@ -657,9 +658,6 @@ load_unlock_retries_finish (MMIfaceModem *self, MM_CORE_ERROR_FAILED, "Could not parse ^CPIN results: Response didn't match (%s)", result); - - g_match_info_free (match_info); - g_regex_unref (r); return NULL; } @@ -683,9 +681,6 @@ load_unlock_retries_finish (MMIfaceModem *self, mm_unlock_retries_set (unlock_retries, locks[i], num); } - g_match_info_free (match_info); - g_regex_unref (r); - return unlock_retries; } diff --git a/plugins/huawei/mm-modem-helpers-huawei.c b/plugins/huawei/mm-modem-helpers-huawei.c index 3ded6237..67bb7089 100644 --- a/plugins/huawei/mm-modem-helpers-huawei.c +++ b/plugins/huawei/mm-modem-helpers-huawei.c @@ -39,8 +39,6 @@ mm_huawei_parse_ndisstatqry_response (const gchar *response, gboolean *ipv6_connected, GError **error) { - GRegex *r; - GMatchInfo *match_info; GError *inner_error = NULL; if (!response || @@ -71,6 +69,9 @@ mm_huawei_parse_ndisstatqry_response (const gchar *response, /* If multiple fields available, try first parsing method */ if (strchr (response, ',')) { + g_autoptr(GRegex) r = NULL; + g_autoptr(GMatchInfo) match_info = NULL; + r = g_regex_new ("\\^NDISSTAT(?:QRY)?(?:Qry)?:\\s*(\\d),([^,]*),([^,]*),([^,\\r\\n]*)(?:\\r\\n)?" "(?:\\^NDISSTAT:|\\^NDISSTATQRY:)?\\s*,?(\\d)?,?([^,]*)?,?([^,]*)?,?([^,\\r\\n]*)?(?:\\r\\n)?", G_REGEX_DOLLAR_ENDONLY | G_REGEX_RAW, @@ -108,12 +109,12 @@ mm_huawei_parse_ndisstatqry_response (const gchar *response, ip_type_field += 4; } } - - g_match_info_free (match_info); - g_regex_unref (r); } /* No separate IPv4/IPv6 info given just connected/not connected */ else { + g_autoptr(GRegex) r = NULL; + g_autoptr(GMatchInfo) match_info = NULL; + r = g_regex_new ("\\^NDISSTAT(?:QRY)?(?:Qry)?:\\s*(\\d)(?:\\r\\n)?", G_REGEX_DOLLAR_ENDONLY | G_REGEX_RAW, 0, NULL); @@ -134,9 +135,6 @@ mm_huawei_parse_ndisstatqry_response (const gchar *response, *ipv4_connected = (gboolean)connected; } } - - g_match_info_free (match_info); - g_regex_unref (r); } if (!ipv4_available && !ipv6_available) { @@ -208,10 +206,10 @@ mm_huawei_parse_dhcp_response (const char *reply, guint *out_dns2, GError **error) { - gboolean matched; - GRegex *r; - GMatchInfo *match_info = NULL; - GError *match_error = NULL; + g_autoptr(GRegex) r = NULL; + g_autoptr(GMatchInfo) match_info = NULL; + gboolean matched; + GError *match_error = NULL; g_assert (reply != NULL); g_assert (out_address != NULL); @@ -257,8 +255,6 @@ mm_huawei_parse_dhcp_response (const char *reply, } } - g_match_info_free (match_info); - g_regex_unref (r); return matched; } @@ -276,10 +272,10 @@ mm_huawei_parse_sysinfo_response (const char *reply, guint *out_sys_submode, GError **error) { - gboolean matched; - GRegex *r; - GMatchInfo *match_info = NULL; - GError *match_error = NULL; + g_autoptr(GRegex) r = NULL; + g_autoptr(GMatchInfo) match_info = NULL; + gboolean matched; + GError *match_error = NULL; g_assert (out_srv_status != NULL); g_assert (out_srv_domain != NULL); @@ -323,8 +319,6 @@ mm_huawei_parse_sysinfo_response (const char *reply, } } - g_match_info_free (match_info); - g_regex_unref (r); return matched; } @@ -341,10 +335,10 @@ mm_huawei_parse_sysinfoex_response (const char *reply, guint *out_sys_submode, GError **error) { - gboolean matched; - GRegex *r; - GMatchInfo *match_info = NULL; - GError *match_error = NULL; + g_autoptr(GRegex) r = NULL; + g_autoptr(GMatchInfo) match_info = NULL; + gboolean matched; + GError *match_error = NULL; g_assert (out_srv_status != NULL); g_assert (out_srv_domain != NULL); @@ -387,8 +381,6 @@ mm_huawei_parse_sysinfoex_response (const char *reply, mm_get_uint_from_match_info (match_info, 8, out_sys_submode); } - g_match_info_free (match_info); - g_regex_unref (r); return matched; } @@ -1189,17 +1181,23 @@ mm_huawei_parse_syscfgex_response (const gchar *response, /*****************************************************************************/ /* ^NWTIME response parser */ -gboolean mm_huawei_parse_nwtime_response (const gchar *response, - gchar **iso8601p, - MMNetworkTimezone **tzp, - GError **error) +gboolean +mm_huawei_parse_nwtime_response (const gchar *response, + gchar **iso8601p, + MMNetworkTimezone **tzp, + GError **error) { - GRegex *r; - GMatchInfo *match_info = NULL; - GError *match_error = NULL; - guint year = 0, month = 0, day = 0, hour = 0, minute = 0, second = 0, dt = 0; - gint tz = 0; - gboolean ret = FALSE; + g_autoptr(GRegex) r = NULL; + g_autoptr(GMatchInfo) match_info = NULL; + GError *match_error = NULL; + guint year = 0; + guint month = 0; + guint day = 0; + guint hour = 0; + guint minute = 0; + guint second = 0; + guint dt = 0; + gint tz = 0; g_assert (iso8601p || tzp); /* at least one */ @@ -1211,75 +1209,72 @@ gboolean mm_huawei_parse_nwtime_response (const gchar *response, g_propagate_error (error, match_error); g_prefix_error (error, "Could not parse ^NWTIME results: "); } else { - g_set_error_literal (error, - MM_CORE_ERROR, - MM_CORE_ERROR_FAILED, + g_set_error_literal (error, MM_CORE_ERROR, MM_CORE_ERROR_FAILED, "Couldn't match ^NWTIME reply"); } - } else { - /* Remember that g_match_info_get_match_count() includes match #0 */ - g_assert (g_match_info_get_match_count (match_info) >= 9); - - if (mm_get_uint_from_match_info (match_info, 1, &year) && - mm_get_uint_from_match_info (match_info, 2, &month) && - mm_get_uint_from_match_info (match_info, 3, &day) && - mm_get_uint_from_match_info (match_info, 4, &hour) && - mm_get_uint_from_match_info (match_info, 5, &minute) && - mm_get_uint_from_match_info (match_info, 6, &second) && - mm_get_int_from_match_info (match_info, 7, &tz) && - mm_get_uint_from_match_info (match_info, 8, &dt)) { - - ret = TRUE; - - /* adjust year */ - if (year < 100) - year += 2000; - /* - * tz = timezone offset in 15 minute intervals - * dt = daylight adjustment, 0 = none, 1 = 1 hour, 2 = 2 hours - * other values are marked reserved. - */ - if (iso8601p) { - /* Return ISO-8601 format date/time string */ - *iso8601p = mm_new_iso8601_time (year, month, day, hour, - minute, second, - TRUE, (tz * 15) + (dt * 60), - error); - ret = (*iso8601p != NULL); - } - if (tzp) { - *tzp = mm_network_timezone_new (); - mm_network_timezone_set_offset (*tzp, tz * 15); - mm_network_timezone_set_dst_offset (*tzp, dt * 60); - } + return FALSE; + } - } else { - g_set_error_literal (error, - MM_CORE_ERROR, - MM_CORE_ERROR_FAILED, - "Failed to parse ^NWTIME reply"); + /* Remember that g_match_info_get_match_count() includes match #0 */ + g_assert (g_match_info_get_match_count (match_info) >= 9); + + if (mm_get_uint_from_match_info (match_info, 1, &year) && + mm_get_uint_from_match_info (match_info, 2, &month) && + mm_get_uint_from_match_info (match_info, 3, &day) && + mm_get_uint_from_match_info (match_info, 4, &hour) && + mm_get_uint_from_match_info (match_info, 5, &minute) && + mm_get_uint_from_match_info (match_info, 6, &second) && + mm_get_int_from_match_info (match_info, 7, &tz) && + mm_get_uint_from_match_info (match_info, 8, &dt)) { + + /* adjust year */ + if (year < 100) + year += 2000; + /* + * tz = timezone offset in 15 minute intervals + * dt = daylight adjustment, 0 = none, 1 = 1 hour, 2 = 2 hours + * other values are marked reserved. + */ + if (tzp) { + *tzp = mm_network_timezone_new (); + mm_network_timezone_set_offset (*tzp, tz * 15); + mm_network_timezone_set_dst_offset (*tzp, dt * 60); + } + if (iso8601p) { + /* Return ISO-8601 format date/time string */ + *iso8601p = mm_new_iso8601_time (year, month, day, hour, + minute, second, + TRUE, (tz * 15) + (dt * 60), + error); + return (*iso8601p != NULL); } - } - g_match_info_free (match_info); - g_regex_unref (r); + return TRUE; + } - return ret; + g_set_error_literal (error, MM_CORE_ERROR, MM_CORE_ERROR_FAILED, + "Failed to parse ^NWTIME reply"); + return FALSE; } /*****************************************************************************/ /* ^TIME response parser */ -gboolean mm_huawei_parse_time_response (const gchar *response, - gchar **iso8601p, - MMNetworkTimezone **tzp, - GError **error) +gboolean +mm_huawei_parse_time_response (const gchar *response, + gchar **iso8601p, + MMNetworkTimezone **tzp, + GError **error) { - GRegex *r; - GMatchInfo *match_info = NULL; - GError *match_error = NULL; - guint year, month, day, hour, minute, second; - gboolean ret = FALSE; + g_autoptr(GRegex) r = NULL; + g_autoptr(GMatchInfo) match_info = NULL; + GError *match_error = NULL; + guint year = 0; + guint month = 0; + guint day = 0; + guint hour = 0; + guint minute = 0; + guint second = 0; g_assert (iso8601p || tzp); /* at least one */ @@ -1306,41 +1301,35 @@ gboolean mm_huawei_parse_time_response (const gchar *response, MM_CORE_ERROR_FAILED, "Couldn't match ^TIME reply"); } - } else { - /* Remember that g_match_info_get_match_count() includes match #0 */ - g_assert (g_match_info_get_match_count (match_info) >= 7); - - if (mm_get_uint_from_match_info (match_info, 1, &year) && - mm_get_uint_from_match_info (match_info, 2, &month) && - mm_get_uint_from_match_info (match_info, 3, &day) && - mm_get_uint_from_match_info (match_info, 4, &hour) && - mm_get_uint_from_match_info (match_info, 5, &minute) && - mm_get_uint_from_match_info (match_info, 6, &second)) { - ret = TRUE; - - /* adjust year */ - if (year < 100) - year += 2000; + return FALSE; + } - /* Return ISO-8601 format date/time string */ - if (iso8601p) { - *iso8601p = mm_new_iso8601_time (year, month, day, hour, - minute, second, FALSE, 0, - error); - ret = (*iso8601p != NULL); - } - } else { - g_set_error_literal (error, - MM_CORE_ERROR, - MM_CORE_ERROR_FAILED, - "Failed to parse ^TIME reply"); + /* Remember that g_match_info_get_match_count() includes match #0 */ + g_assert (g_match_info_get_match_count (match_info) >= 7); + + if (mm_get_uint_from_match_info (match_info, 1, &year) && + mm_get_uint_from_match_info (match_info, 2, &month) && + mm_get_uint_from_match_info (match_info, 3, &day) && + mm_get_uint_from_match_info (match_info, 4, &hour) && + mm_get_uint_from_match_info (match_info, 5, &minute) && + mm_get_uint_from_match_info (match_info, 6, &second)) { + /* adjust year */ + if (year < 100) + year += 2000; + + /* Return ISO-8601 format date/time string */ + if (iso8601p) { + *iso8601p = mm_new_iso8601_time (year, month, day, hour, + minute, second, FALSE, 0, + error); + return (*iso8601p != NULL); } + return TRUE; } - g_match_info_free (match_info); - g_regex_unref (r); - - return ret; + g_set_error_literal (error, MM_CORE_ERROR, MM_CORE_ERROR_FAILED, + "Failed to parse ^TIME reply"); + return FALSE; } /*****************************************************************************/ @@ -1356,11 +1345,9 @@ mm_huawei_parse_hcsq_response (const gchar *response, guint *out_value5, GError **error) { - GRegex *r; - GMatchInfo *match_info = NULL; - GError *match_error = NULL; - gboolean ret = FALSE; - char *s; + g_autoptr(GRegex) r = NULL; + g_autoptr(GMatchInfo) match_info = NULL; + GError *match_error = NULL; r = g_regex_new ("\\^HCSQ:\\s*\"?([a-zA-Z]*)\"?,(\\d+),?(\\d+)?,?(\\d+)?,?(\\d+)?,?(\\d+)?$", 0, 0, NULL); g_assert (r != NULL); @@ -1370,27 +1357,24 @@ mm_huawei_parse_hcsq_response (const gchar *response, g_propagate_error (error, match_error); g_prefix_error (error, "Could not parse ^HCSQ results: "); } else { - g_set_error_literal (error, - MM_CORE_ERROR, - MM_CORE_ERROR_FAILED, + g_set_error_literal (error, MM_CORE_ERROR, MM_CORE_ERROR_FAILED, "Couldn't match ^HCSQ reply"); } - goto done; + return FALSE; } /* Remember that g_match_info_get_match_count() includes match #0 */ if (g_match_info_get_match_count (match_info) < 3) { - g_set_error_literal (error, - MM_CORE_ERROR, - MM_CORE_ERROR_FAILED, + g_set_error_literal (error, MM_CORE_ERROR, MM_CORE_ERROR_FAILED, "Not enough elements in ^HCSQ reply"); - goto done; + return FALSE; } if (out_act) { + g_autofree gchar *s = NULL; + s = g_match_info_fetch (match_info, 1); *out_act = mm_string_to_access_tech (s); - g_free (s); } if (out_value1) @@ -1404,13 +1388,7 @@ mm_huawei_parse_hcsq_response (const gchar *response, if (out_value5) mm_get_uint_from_match_info (match_info, 6, out_value5); - ret = TRUE; - -done: - g_match_info_free (match_info); - g_regex_unref (r); - - return ret; + return TRUE; } /*****************************************************************************/ @@ -1422,11 +1400,12 @@ mm_huawei_parse_cvoice_response (const gchar *response, guint *out_bits, GError **error) { - GRegex *r; - GMatchInfo *match_info = NULL; - GError *match_error = NULL; - guint supported = 0, hz = 0, bits = 0; - gboolean ret = FALSE; + g_autoptr(GRegex) r = NULL; + g_autoptr(GMatchInfo) match_info = NULL; + GError *match_error = NULL; + guint supported = 0; + guint hz = 0; + guint bits = 0; /* ^CVOICE: <0=supported,1=unsupported>,<hz>,<bits>,<unknown> */ r = g_regex_new ("\\^CVOICE:\\s*(\\d)\\s*,\\s*(\\d+)\\s*,\\s*(\\d+)\\s*,\\s*(\\d+)$", 0, 0, NULL); @@ -1442,37 +1421,31 @@ mm_huawei_parse_cvoice_response (const gchar *response, MM_CORE_ERROR_FAILED, "Couldn't match ^CVOICE reply"); } - } else { - /* Remember that g_match_info_get_match_count() includes match #0 */ - g_assert (g_match_info_get_match_count (match_info) >= 5); - - if (mm_get_uint_from_match_info (match_info, 1, &supported) && - mm_get_uint_from_match_info (match_info, 2, &hz) && - mm_get_uint_from_match_info (match_info, 3, &bits)) { - if (supported == 0) { - if (out_hz) - *out_hz = hz; - if (out_bits) - *out_bits = bits; - ret = TRUE; - } else { - g_set_error_literal (error, - MM_CORE_ERROR, - MM_CORE_ERROR_UNSUPPORTED, - "^CVOICE not supported by this device"); - } - } else { - g_set_error_literal (error, - MM_CORE_ERROR, - MM_CORE_ERROR_FAILED, - "Failed to parse ^CVOICE reply"); - } + return FALSE; } - g_match_info_free (match_info); - g_regex_unref (r); + /* Remember that g_match_info_get_match_count() includes match #0 */ + g_assert (g_match_info_get_match_count (match_info) >= 5); + + if (mm_get_uint_from_match_info (match_info, 1, &supported) && + mm_get_uint_from_match_info (match_info, 2, &hz) && + mm_get_uint_from_match_info (match_info, 3, &bits)) { + if (supported == 0) { + if (out_hz) + *out_hz = hz; + if (out_bits) + *out_bits = bits; + return TRUE; + } + + g_set_error_literal (error, MM_CORE_ERROR, MM_CORE_ERROR_UNSUPPORTED, + "^CVOICE not supported by this device"); + return FALSE; + } - return ret; + g_set_error_literal (error, MM_CORE_ERROR, MM_CORE_ERROR_FAILED, + "Failed to parse ^CVOICE reply"); + return FALSE; } /*****************************************************************************/ diff --git a/plugins/icera/mm-broadband-modem-icera.c b/plugins/icera/mm-broadband-modem-icera.c index 897d2562..759985e0 100644 --- a/plugins/icera/mm-broadband-modem-icera.c +++ b/plugins/icera/mm-broadband-modem-icera.c @@ -123,12 +123,12 @@ load_supported_modes_finish (MMIfaceModem *self, GAsyncResult *res, GError **error) { - GArray *combinations = NULL; - const gchar *response; - gchar **split = NULL; - GMatchInfo *match_info; - GRegex *r; - guint i; + GArray *combinations = NULL; + const gchar *response; + gchar **split = NULL; + g_autoptr(GMatchInfo) match_info = NULL; + g_autoptr(GRegex) r = NULL; + guint i; response = mm_base_modem_at_command_finish (MM_BASE_MODEM (self), res, error); if (!response) @@ -145,18 +145,13 @@ load_supported_modes_finish (MMIfaceModem *self, g_regex_match (r, response, 0, &match_info); if (g_match_info_matches (match_info)) { - gchar *aux; + g_autofree gchar *aux = NULL; aux = mm_get_string_unquoted_from_match_info (match_info, 1); - if (aux) { + if (aux) split = g_strsplit (aux, ",", -1); - g_free (aux); - } } - g_match_info_free (match_info); - g_regex_unref (r); - if (!split) { g_set_error (error, MM_CORE_ERROR, @@ -1122,11 +1117,12 @@ icera_band_to_mm (const char *icera) } static GSList * -parse_bands (const gchar *response, guint32 *out_len) +parse_bands (const gchar *response, + guint32 *out_len) { - GRegex *r; - GMatchInfo *info; - GSList *bands = NULL; + g_autoptr(GRegex) r = NULL; + g_autoptr(GMatchInfo) info = NULL; + GSList *bands = NULL; g_return_val_if_fail (out_len != NULL, NULL); @@ -1163,8 +1159,6 @@ parse_bands (const gchar *response, guint32 *out_len) g_free (enabled); g_match_info_next (info, NULL); } - g_match_info_free (info); - g_regex_unref (r); return bands; } diff --git a/plugins/mbm/mm-modem-helpers-mbm.c b/plugins/mbm/mm-modem-helpers-mbm.c index 31fbb376..846cc4d6 100644 --- a/plugins/mbm/mm-modem-helpers-mbm.c +++ b/plugins/mbm/mm-modem-helpers-mbm.c @@ -55,15 +55,17 @@ mm_mbm_parse_e2ipcfg_response (const gchar *response, MMBearerIpConfig **out_ip6_config, GError **error) { - MMBearerIpConfig **ip_config = NULL; - gboolean got_address = FALSE, got_gw = FALSE, got_dns = FALSE; - GRegex *r; - GMatchInfo *match_info = NULL; - GError *match_error = NULL; - gchar *dns[3] = { 0 }; - guint dns_idx = 0; - int family = AF_INET; - MMBearerIpMethod method = MM_BEARER_IP_METHOD_STATIC; + MMBearerIpConfig **ip_config = NULL; + gboolean got_address = FALSE; + gboolean got_gw = FALSE; + gboolean got_dns = FALSE; + g_autoptr(GRegex) r = NULL; + g_autoptr(GMatchInfo) match_info = NULL; + GError *match_error = NULL; + gchar *dns[3] = { 0 }; + guint dns_idx = 0; + int family = AF_INET; + MMBearerIpMethod method = MM_BEARER_IP_METHOD_STATIC; g_return_val_if_fail (out_ip4_config, FALSE); g_return_val_if_fail (out_ip6_config, FALSE); @@ -108,14 +110,17 @@ mm_mbm_parse_e2ipcfg_response (const gchar *response, MM_CORE_ERROR_FAILED, "Couldn't match " E2IPCFG_TAG " reply"); } - goto done; + return FALSE; } *ip_config = mm_bearer_ip_config_new (); mm_bearer_ip_config_set_method (*ip_config, method); while (g_match_info_matches (match_info)) { - char *id = g_match_info_fetch (match_info, 1); - char *str = g_match_info_fetch (match_info, 2); + g_autofree gchar *id = NULL; + g_autofree gchar *str = NULL; + + id = g_match_info_fetch (match_info, 1); + str = g_match_info_fetch (match_info, 2); switch (atoi (id)) { case 1: @@ -140,8 +145,6 @@ mm_mbm_parse_e2ipcfg_response (const gchar *response, default: break; } - g_free (id); - g_free (str); g_match_info_next (match_info, NULL); } @@ -156,12 +159,10 @@ mm_mbm_parse_e2ipcfg_response (const gchar *response, *ip_config = NULL; g_set_error_literal (error, MM_CORE_ERROR, MM_CORE_ERROR_FAILED, "Got incomplete IP configuration from " E2IPCFG_TAG); + return FALSE; } -done: - g_match_info_free (match_info); - g_regex_unref (r); - return !!*ip_config; + return TRUE; } /*****************************************************************************/ diff --git a/plugins/mtk/mm-broadband-modem-mtk.c b/plugins/mtk/mm-broadband-modem-mtk.c index 0ceca795..869784f3 100644 --- a/plugins/mtk/mm-broadband-modem-mtk.c +++ b/plugins/mtk/mm-broadband-modem-mtk.c @@ -67,13 +67,16 @@ load_unlock_retries_ready (MMBaseModem *self, GAsyncResult *res, GTask *task) { - const gchar *response; - GError *error = NULL; - GMatchInfo *match_info = NULL; - GError *match_error = NULL; - GRegex *r = NULL; - gint pin1, puk1, pin2, puk2; - MMUnlockRetries *retries; + g_autoptr(GMatchInfo) match_info = NULL; + g_autoptr(GRegex) r = NULL; + const gchar *response; + GError *error = NULL; + GError *match_error = NULL; + gint pin1; + gint puk1; + gint pin2; + gint puk2; + MMUnlockRetries *retries; response = mm_base_modem_at_command_finish (MM_BASE_MODEM (self), res, &error); if (!response) { @@ -91,14 +94,11 @@ load_unlock_retries_ready (MMBaseModem *self, g_assert (r != NULL); if (!g_regex_match_full (r, response, strlen (response), 0, 0, &match_info, &match_error)){ - if (match_error) { - g_propagate_error (&error, match_error); - } else { - g_set_error (&error, - MM_CORE_ERROR, - MM_CORE_ERROR_FAILED, - "Failed to match EPINC response: %s", response); - } + if (match_error) + g_task_return_error (task, match_error); + else + g_task_return_new_error (task, MM_CORE_ERROR, MM_CORE_ERROR_FAILED, + "Failed to match EPINC response: %s", response); g_task_return_error (task, error); } else if (!mm_get_int_from_match_info (match_info, 1, &pin1) || !mm_get_int_from_match_info (match_info, 2, &pin2) || @@ -120,9 +120,6 @@ load_unlock_retries_ready (MMBaseModem *self, g_task_return_pointer (task, retries, g_object_unref); } g_object_unref (task); - - g_match_info_free (match_info); - g_regex_unref (r); } static void @@ -178,14 +175,14 @@ get_supported_modes_ready (MMBaseModem *self, GTask *task) { - const gchar *response; - GError *error = NULL; - GMatchInfo *match_info = NULL; - MMModemModeCombination mode; - GArray *combinations; - GRegex *r; - GError *match_error = NULL; - gint device_type; + g_autoptr(GMatchInfo) match_info = NULL; + g_autoptr(GRegex) r = NULL; + const gchar *response; + GError *error = NULL; + MMModemModeCombination mode; + GArray *combinations; + GError *match_error = NULL; + gint device_type; response = mm_base_modem_at_command_finish (MM_BASE_MODEM (self), res, &error); if (!response) { @@ -205,9 +202,6 @@ get_supported_modes_ready (MMBaseModem *self, g_task_return_new_error (task, MM_CORE_ERROR, MM_CORE_ERROR_FAILED, "Failed to match EGMR response: %s", response); g_object_unref (task); - - g_match_info_free (match_info); - g_regex_unref (r); return; } @@ -216,9 +210,6 @@ get_supported_modes_ready (MMBaseModem *self, "Failed to parse the allowed mode response: '%s'", response); g_object_unref (task); - - g_regex_unref (r); - g_match_info_free (match_info); return; } @@ -271,9 +262,6 @@ get_supported_modes_ready (MMBaseModem *self, */ g_task_return_pointer (task, combinations, (GDestroyNotify)g_array_unref); g_object_unref (task); - - g_regex_unref (r); - g_match_info_free (match_info); } static void @@ -307,17 +295,16 @@ load_current_modes_finish (MMIfaceModem *self, MMModemMode *preferred, GError **error) { - const gchar *response; - GMatchInfo *match_info = NULL; - GRegex *r; - gint erat_mode = -1; - gint erat_pref = -1; - GError *match_error = NULL; - gboolean result = FALSE; + g_autoptr(GMatchInfo) match_info = NULL; + g_autoptr(GRegex) r = NULL; + const gchar *response; + gint erat_mode = -1; + gint erat_pref = -1; + GError *match_error = NULL; response = mm_base_modem_at_command_finish (MM_BASE_MODEM (self), res, error); if (!response) - return result; + return FALSE; r = g_regex_new ( "\\+ERAT:\\s*[0-9]+,\\s*[0-9]+,\\s*([0-9]+),\\s*([0-9]+)", @@ -329,30 +316,22 @@ load_current_modes_finish (MMIfaceModem *self, if (!g_regex_match_full (r, response, strlen (response), 0, 0, &match_info, &match_error)) { if (match_error) g_propagate_error (error, match_error); - else { - g_set_error (error, - MM_CORE_ERROR, - MM_CORE_ERROR_FAILED, + else + g_set_error (error, MM_CORE_ERROR, MM_CORE_ERROR_FAILED, "Couldn't parse +ERAT response: '%s'", response); - - } - goto done; + return FALSE; } if (!mm_get_int_from_match_info (match_info, 1, &erat_mode) || !mm_get_int_from_match_info (match_info, 2, &erat_pref)) { - g_set_error (error, - MM_CORE_ERROR, - MM_CORE_ERROR_FAILED, + g_set_error (error, MM_CORE_ERROR, MM_CORE_ERROR_FAILED, "Failed to parse the ERAT response: m=%d p=%d", erat_mode, erat_pref); - goto done; + return FALSE; } /* Correctly parsed! */ - result = TRUE; - switch (erat_mode) { case 0: *allowed = MM_MODEM_MODE_2G; @@ -376,9 +355,8 @@ load_current_modes_finish (MMIfaceModem *self, *allowed = MM_MODEM_MODE_2G | MM_MODEM_MODE_3G | MM_MODEM_MODE_4G; break; default: - result = FALSE; mm_obj_dbg (self, "unsupported allowed mode reported in +ERAT: %d", erat_mode); - goto done; + return FALSE; } switch (erat_pref) { @@ -395,17 +373,11 @@ load_current_modes_finish (MMIfaceModem *self, *preferred = MM_MODEM_MODE_4G; break; default: - result = FALSE; mm_obj_dbg (self, "unsupported preferred mode %d", erat_pref); - goto done; + return FALSE; } -done: - if (r) - g_regex_unref (r); - g_match_info_free (match_info); - - return result; + return TRUE; } static void diff --git a/plugins/novatel/mm-broadband-modem-novatel.c b/plugins/novatel/mm-broadband-modem-novatel.c index 1cc88e90..46bf438a 100644 --- a/plugins/novatel/mm-broadband-modem-novatel.c +++ b/plugins/novatel/mm-broadband-modem-novatel.c @@ -159,12 +159,12 @@ nwrat_query_ready (MMBaseModem *self, GTask *task) { LoadCurrentModesResult *result; - GError *error = NULL; - const gchar *response; - GRegex *r; - GMatchInfo *match_info = NULL; - gint a = -1; - gint b = -1; + GError *error = NULL; + const gchar *response; + g_autoptr(GRegex) r = NULL; + g_autoptr(GMatchInfo) match_info = NULL; + gint a = -1; + gint b = -1; response = mm_base_modem_at_command_finish (MM_BASE_MODEM (self), res, &error); if (!response) { @@ -187,8 +187,6 @@ nwrat_query_ready (MMBaseModem *self, "Couldn't match NWRAT reply: %s", response); g_object_unref (task); - g_match_info_free (match_info); - g_regex_unref (r); return; } @@ -203,8 +201,6 @@ nwrat_query_ready (MMBaseModem *self, "Failed to parse mode/tech response '%s': invalid modes reported", response); g_object_unref (task); - g_match_info_free (match_info); - g_regex_unref (r); return; } @@ -239,9 +235,6 @@ nwrat_query_ready (MMBaseModem *self, break; } - g_match_info_free (match_info); - g_regex_unref (r); - g_task_return_pointer (task, result, g_free); g_object_unref (task); } @@ -1396,13 +1389,18 @@ parse_nwltime_reply (const char *response, MMNetworkTimezone **out_tz, GError **error) { - GRegex *r; - GMatchInfo *match_info = NULL; - GError *match_error = NULL; - guint year, month, day, hour, minute, second; - gchar *result = NULL; - gint utc_offset = 0; - gboolean success = FALSE; + g_autoptr(GRegex) r = NULL; + g_autoptr(GMatchInfo) match_info = NULL; + GError *match_error = NULL; + guint year; + guint month; + guint day; + guint hour; + guint minute; + guint second; + g_autofree gchar *result = NULL; + gint utc_offset = 0; + gboolean success = FALSE; /* Sample reply: 2013.3.27.15.47.19.2.-5 */ r = g_regex_new ("(\\d+)\\.(\\d+)\\.(\\d+)\\.(\\d+)\\.(\\d+)\\.(\\d+)\\.(\\d+)\\.([\\-\\+\\d]+)$", 0, 0, NULL); @@ -1429,7 +1427,6 @@ parse_nwltime_reply (const char *response, mm_get_uint_from_match_info (match_info, 5, &minute) && mm_get_uint_from_match_info (match_info, 6, &second) && mm_get_int_from_match_info (match_info, 8, &utc_offset)) { - result = mm_new_iso8601_time (year, month, day, hour, minute, second, TRUE, utc_offset * 60, error); if (out_tz) { @@ -1447,12 +1444,8 @@ parse_nwltime_reply (const char *response, } if (out_iso_8601) - *out_iso_8601 = result; - else - g_free (result); + *out_iso_8601 = g_steal_pointer (&result); - g_match_info_free (match_info); - g_regex_unref (r); return success; } diff --git a/plugins/option/mm-broadband-modem-option.c b/plugins/option/mm-broadband-modem-option.c index 5919364d..dcecd5b0 100644 --- a/plugins/option/mm-broadband-modem-option.c +++ b/plugins/option/mm-broadband-modem-option.c @@ -362,12 +362,10 @@ static gboolean parse_ossys_response (const gchar *response, MMModemAccessTechnology *access_technology) { - MMModemAccessTechnology current = MM_MODEM_ACCESS_TECHNOLOGY_UNKNOWN; - const gchar *p; - GRegex *r; - GMatchInfo *match_info; - gchar *str; - gboolean success = FALSE; + MMModemAccessTechnology current = MM_MODEM_ACCESS_TECHNOLOGY_UNKNOWN; + const gchar *p; + g_autoptr(GRegex) r = NULL; + g_autoptr(GMatchInfo) match_info = NULL; p = mm_strip_tag (response, "_OSSYS:"); r = g_regex_new ("(\\d),(\\d)", G_REGEX_UNGREEDY, 0, NULL); @@ -375,17 +373,15 @@ parse_ossys_response (const gchar *response, g_regex_match (r, p, 0, &match_info); if (g_match_info_matches (match_info)) { + g_autofree gchar *str = NULL; + str = g_match_info_fetch (match_info, 2); if (str && ossys_to_mm (str[0], ¤t)) { *access_technology = current; - success = TRUE; - } - g_free (str); + return TRUE; + } } - g_match_info_free (match_info); - g_regex_unref (r); - - return success; + return FALSE; } static void @@ -445,12 +441,10 @@ static gboolean parse_octi_response (const gchar *response, MMModemAccessTechnology *access_technology) { - MMModemAccessTechnology current = MM_MODEM_ACCESS_TECHNOLOGY_UNKNOWN; - const gchar *p; - GRegex *r; - GMatchInfo *match_info; - gchar *str; - gboolean success = FALSE; + MMModemAccessTechnology current = MM_MODEM_ACCESS_TECHNOLOGY_UNKNOWN; + const gchar *p; + g_autoptr(GRegex) r = NULL; + g_autoptr(GMatchInfo) match_info = NULL; p = mm_strip_tag (response, "_OCTI:"); r = g_regex_new ("(\\d),(\\d)", G_REGEX_UNGREEDY, 0, NULL); @@ -458,17 +452,15 @@ parse_octi_response (const gchar *response, g_regex_match (r, p, 0, &match_info); if (g_match_info_matches (match_info)) { + g_autofree gchar *str = NULL; + str = g_match_info_fetch (match_info, 2); if (str && octi_to_mm (str[0], ¤t)) { *access_technology = current; - success = TRUE; + return TRUE; } - g_free (str); } - g_match_info_free (match_info); - g_regex_unref (r); - - return success; + return FALSE; } static void diff --git a/plugins/quectel/mm-shared-quectel.c b/plugins/quectel/mm-shared-quectel.c index ab079436..c383dc05 100644 --- a/plugins/quectel/mm-shared-quectel.c +++ b/plugins/quectel/mm-shared-quectel.c @@ -440,8 +440,8 @@ mm_shared_quectel_setup_sim_hot_swap (MMIfaceModem *self, Private *priv; MMPortSerialAt *ports[2]; GTask *task; - GRegex *pattern; guint i; + g_autoptr(GRegex) pattern = NULL; g_autoptr(GError) error = NULL; priv = get_private (MM_SHARED_QUECTEL (self)); @@ -464,7 +464,6 @@ mm_shared_quectel_setup_sim_hot_swap (MMIfaceModem *self, NULL); } - g_regex_unref (pattern); mm_obj_dbg (self, "+QUSIM detection set up"); if (!mm_broadband_modem_sim_hot_swap_ports_context_init (MM_BROADBAND_MODEM (self), &error)) diff --git a/plugins/sierra/mm-broadband-modem-sierra.c b/plugins/sierra/mm-broadband-modem-sierra.c index 3ac20808..bae8e344 100644 --- a/plugins/sierra/mm-broadband-modem-sierra.c +++ b/plugins/sierra/mm-broadband-modem-sierra.c @@ -624,7 +624,7 @@ load_current_modes_finish (MMIfaceModem *self, MMModemMode *preferred, GError **error) { - LoadCurrentModesResult *result; + g_autofree LoadCurrentModesResult *result = NULL; result = g_task_propagate_pointer (G_TASK (res), error); if (!result) @@ -632,7 +632,6 @@ load_current_modes_finish (MMIfaceModem *self, *allowed = result->allowed; *preferred = result->preferred; - g_free (result); return TRUE; } @@ -641,11 +640,11 @@ selrat_query_ready (MMBaseModem *self, GAsyncResult *res, GTask *task) { - LoadCurrentModesResult *result; - const gchar *response; - GError *error = NULL; - GRegex *r = NULL; - GMatchInfo *match_info = NULL; + g_autofree LoadCurrentModesResult *result = NULL; + const gchar *response; + GError *error = NULL; + g_autoptr(GRegex) r = NULL; + g_autoptr(GMatchInfo) match_info = NULL; response = mm_base_modem_at_command_full_finish (self, res, &error); if (!response) { @@ -727,15 +726,10 @@ selrat_query_ready (MMBaseModem *self, "Could not parse allowed mode response: Response didn't match: '%s'", response); - g_match_info_free (match_info); - g_regex_unref (r); - - if (error) { - g_free (result); + if (error) g_task_return_error (task, error); - } else - g_task_return_pointer (task, result, g_free); - + else + g_task_return_pointer (task, g_steal_pointer (&result), g_free); g_object_unref (task); } @@ -1630,11 +1624,16 @@ parse_time (const gchar *response, const gchar *tag, GError **error) { - GRegex *r; - GMatchInfo *match_info = NULL; - GError *match_error = NULL; - guint year, month, day, hour, minute, second; - gchar *result = NULL; + g_autoptr(GRegex) r = NULL; + g_autoptr(GMatchInfo) match_info = NULL; + GError *match_error = NULL; + guint year; + guint month; + guint day; + guint hour; + guint minute; + guint second; + gchar *result = NULL; r = g_regex_new (regex, 0, 0, NULL); g_assert (r != NULL); @@ -1665,8 +1664,6 @@ parse_time (const gchar *response, } } - g_match_info_free (match_info); - g_regex_unref (r); return result; } diff --git a/plugins/sierra/mm-common-sierra.c b/plugins/sierra/mm-common-sierra.c index 341006d6..72cbc34f 100644 --- a/plugins/sierra/mm-common-sierra.c +++ b/plugins/sierra/mm-common-sierra.c @@ -480,7 +480,7 @@ mm_common_sierra_setup_ports (MMBroadbandModem *self) { MMPortSerialAt *ports[2]; guint i; - GRegex *pacsp_regex; + g_autoptr(GRegex) pacsp_regex = NULL; pacsp_regex = g_regex_new ("\\r\\n\\+PACSP.*\\r\\n", G_REGEX_RAW | G_REGEX_OPTIMIZE, 0, NULL); @@ -505,8 +505,6 @@ mm_common_sierra_setup_ports (MMBroadbandModem *self) pacsp_regex, NULL, NULL, NULL); } - - g_regex_unref (pacsp_regex); } /*****************************************************************************/ diff --git a/plugins/sierra/mm-modem-helpers-sierra.c b/plugins/sierra/mm-modem-helpers-sierra.c index ac07c9ee..821be199 100644 --- a/plugins/sierra/mm-modem-helpers-sierra.c +++ b/plugins/sierra/mm-modem-helpers-sierra.c @@ -23,16 +23,15 @@ GList * mm_sierra_parse_scact_read_response (const gchar *reply, GError **error) { - GError *inner_error = NULL; - GRegex *r; - GMatchInfo *match_info; - GList *list; + g_autoptr(GRegex) r = NULL; + g_autoptr(GMatchInfo) match_info = NULL; + GError *inner_error = NULL; + GList *list = NULL; if (!reply || !reply[0]) /* Nothing configured, all done */ return NULL; - list = NULL; r = g_regex_new ("!SCACT:\\s*(\\d+),(\\d+)", G_REGEX_DOLLAR_ENDONLY | G_REGEX_RAW, 0, &inner_error); g_assert (r); @@ -66,9 +65,6 @@ mm_sierra_parse_scact_read_response (const gchar *reply, g_match_info_next (match_info, &inner_error); } - g_match_info_free (match_info); - g_regex_unref (r); - if (inner_error) { mm_3gpp_pdp_context_active_list_free (list); g_propagate_error (error, inner_error); @@ -76,7 +72,5 @@ mm_sierra_parse_scact_read_response (const gchar *reply, return NULL; } - list = g_list_sort (list, (GCompareFunc) mm_3gpp_pdp_context_active_cmp); - - return list; + return g_list_sort (list, (GCompareFunc) mm_3gpp_pdp_context_active_cmp); } diff --git a/plugins/simtech/tests/test-modem-helpers-simtech.c b/plugins/simtech/tests/test-modem-helpers-simtech.c index d5d774f2..ba6532cc 100644 --- a/plugins/simtech/tests/test-modem-helpers-simtech.c +++ b/plugins/simtech/tests/test-modem-helpers-simtech.c @@ -33,13 +33,13 @@ common_test_clcc_urc (const gchar *urc, const MMCallInfo *expected_call_info_list, guint expected_call_info_list_size) { - GError *error = NULL; - GRegex *clcc_regex = NULL; - gboolean result; - GMatchInfo *match_info = NULL; - gchar *str; - GList *call_info_list = NULL; - GList *l; + g_autoptr(GRegex) clcc_regex = NULL; + g_autoptr(GMatchInfo) match_info = NULL; + g_autofree gchar *str = NULL; + GError *error = NULL; + GList *call_info_list = NULL; + GList *l; + gboolean result; clcc_regex = mm_simtech_get_clcc_urc_regex (); @@ -84,10 +84,6 @@ common_test_clcc_urc (const gchar *urc, g_assert (found); } - g_match_info_free (match_info); - g_regex_unref (clcc_regex); - g_free (str); - mm_simtech_call_info_list_free (call_info_list); } @@ -148,12 +144,12 @@ common_test_voice_call_urc (const gchar *urc, gboolean expected_start_or_stop, guint expected_duration) { - GError *error = NULL; - gboolean start_or_stop = FALSE; /* start = TRUE, stop = FALSE */ - guint duration = 0; - GRegex *voice_call_regex = NULL; - gboolean result; - GMatchInfo *match_info = NULL; + g_autoptr(GRegex) voice_call_regex = NULL; + g_autoptr(GMatchInfo) match_info = NULL; + GError *error = NULL; + gboolean start_or_stop = FALSE; /* start = TRUE, stop = FALSE */ + guint duration = 0; + gboolean result; voice_call_regex = mm_simtech_get_voice_call_urc_regex (); @@ -168,9 +164,6 @@ common_test_voice_call_urc (const gchar *urc, g_assert_cmpuint (expected_start_or_stop, ==, start_or_stop); g_assert_cmpuint (expected_duration, ==, duration); - - g_match_info_free (match_info); - g_regex_unref (voice_call_regex); } static void @@ -197,11 +190,11 @@ static void common_test_missed_call_urc (const gchar *urc, const gchar *expected_details) { - GError *error = NULL; - gchar *details = NULL; - GRegex *missed_call_regex = NULL; - gboolean result; - GMatchInfo *match_info = NULL; + g_autoptr(GRegex) missed_call_regex = NULL; + g_autoptr(GMatchInfo) match_info = NULL; + g_autofree gchar *details = NULL; + GError *error = NULL; + gboolean result; missed_call_regex = mm_simtech_get_missed_call_urc_regex (); @@ -215,10 +208,6 @@ common_test_missed_call_urc (const gchar *urc, g_assert (result); g_assert_cmpstr (expected_details, ==, details); - g_free (details); - - g_match_info_free (match_info); - g_regex_unref (missed_call_regex); } static void @@ -233,11 +222,11 @@ static void common_test_cring_urc (const gchar *urc, const gchar *expected_type) { - GError *error = NULL; - GRegex *cring_regex = NULL; - GMatchInfo *match_info = NULL; - gchar *type; - gboolean result; + g_autoptr(GRegex) cring_regex = NULL; + g_autoptr(GMatchInfo) match_info = NULL; + g_autofree gchar *type = NULL; + GError *error = NULL; + gboolean result; cring_regex = mm_simtech_get_cring_urc_regex (); @@ -250,10 +239,6 @@ common_test_cring_urc (const gchar *urc, g_assert (type); g_assert_cmpstr (type, ==, expected_type); - - g_match_info_free (match_info); - g_regex_unref (cring_regex); - g_free (type); } static void @@ -274,11 +259,11 @@ static void common_test_rxdtmf_urc (const gchar *urc, const gchar *expected_str) { - GError *error = NULL; - GRegex *rxdtmf_regex = NULL; - GMatchInfo *match_info = NULL; - gchar *type; - gboolean result; + g_autoptr(GRegex) rxdtmf_regex = NULL; + g_autoptr(GMatchInfo) match_info = NULL; + g_autofree gchar *type = NULL; + GError *error = NULL; + gboolean result; rxdtmf_regex = mm_simtech_get_rxdtmf_urc_regex (); @@ -291,10 +276,6 @@ common_test_rxdtmf_urc (const gchar *urc, g_assert (type); g_assert_cmpstr (type, ==, expected_str); - - g_match_info_free (match_info); - g_regex_unref (rxdtmf_regex); - g_free (type); } static void diff --git a/plugins/telit/mm-broadband-modem-telit.c b/plugins/telit/mm-broadband-modem-telit.c index 49e48247..bbf3f760 100644 --- a/plugins/telit/mm-broadband-modem-telit.c +++ b/plugins/telit/mm-broadband-modem-telit.c @@ -501,10 +501,10 @@ telit_qss_enable_ready (MMBaseModem *self, GAsyncResult *res, GTask *task) { - QssSetupContext *ctx; - MMPortSerialAt *port; - GError **error; - GRegex *pattern; + QssSetupContext *ctx; + MMPortSerialAt *port; + GError **error; + g_autoptr(GRegex) pattern = NULL; ctx = g_task_get_task_data (task); @@ -530,7 +530,6 @@ telit_qss_enable_ready (MMBaseModem *self, (MMPortSerialAtUnsolicitedMsgFn)telit_qss_unsolicited_handler, self, NULL); - g_regex_unref (pattern); next_step: ctx->step++; diff --git a/plugins/telit/mm-common-telit.c b/plugins/telit/mm-common-telit.c index 2e0b3801..911c605b 100644 --- a/plugins/telit/mm-common-telit.c +++ b/plugins/telit/mm-common-telit.c @@ -112,12 +112,12 @@ cache_port_mode (MMPortProbe *probe, MMDevice *device, const gchar *reply) { - GRegex *r = NULL; - GRegexCompileFlags flags = G_REGEX_DOLLAR_ENDONLY | G_REGEX_RAW; - GMatchInfo *match_info = NULL; - GError *error = NULL; - gboolean ret = FALSE; - guint portcfg_current; + g_autoptr(GRegex) r = NULL; + g_autoptr(GMatchInfo) match_info = NULL; + GRegexCompileFlags flags = G_REGEX_DOLLAR_ENDONLY | G_REGEX_RAW; + GError *error = NULL; + gboolean ret = FALSE; + guint portcfg_current; /* #PORTCFG: <requested>,<active> */ r = g_regex_new ("#PORTCFG:\\s*(\\d+),(\\d+)", flags, 0, NULL); @@ -173,9 +173,7 @@ cache_port_mode (MMPortProbe *probe, ret = TRUE; out: - g_match_info_free (match_info); - g_regex_unref (r); - if (error != NULL) { + if (error) { mm_obj_dbg (probe, "error while matching #PORTCFG: %s", error->message); g_error_free (error); } diff --git a/plugins/telit/mm-modem-helpers-telit.c b/plugins/telit/mm-modem-helpers-telit.c index c2061fcd..54cd6a0c 100644 --- a/plugins/telit/mm-modem-helpers-telit.c +++ b/plugins/telit/mm-modem-helpers-telit.c @@ -701,11 +701,11 @@ common_parse_bnd_response (const gchar *response, gpointer log_object, GError **error) { - GError *inner_error = NULL; - GArray *bands = NULL; - GMatchInfo *match_info = NULL; - GRegex *r = NULL; - const gchar *load_bands_regex = NULL; + g_autoptr(GMatchInfo) match_info = NULL; + g_autoptr(GRegex) r = NULL; + GError *inner_error = NULL; + GArray *bands = NULL; + const gchar *load_bands_regex = NULL; static const gchar *load_bands_regex_4g_hex[] = { [LOAD_BANDS_TYPE_SUPPORTED] = "#BND:"MM_SUPPORTED_BANDS_2G MM_SUPPORTED_BANDS_3G MM_SUPPORTED_BANDS_4G_HEX, @@ -761,9 +761,6 @@ common_parse_bnd_response (const gchar *response, goto out; } out: - g_match_info_free (match_info); - g_regex_unref (r); - if (inner_error) { g_propagate_error (error, inner_error); g_clear_pointer (&bands, g_array_unref); diff --git a/plugins/ublox/mm-broadband-modem-ublox.c b/plugins/ublox/mm-broadband-modem-ublox.c index b5c2072d..e070b750 100644 --- a/plugins/ublox/mm-broadband-modem-ublox.c +++ b/plugins/ublox/mm-broadband-modem-ublox.c @@ -1122,10 +1122,10 @@ static void ublox_setup_ciev_handler (MMIfaceModem *self, guint simind_idx) { - GRegex *pattern; - gchar *ciev_regex; - MMPortSerialAt *primary_port; - MMPortSerialAt *secondary_port; + g_autoptr(GRegex) pattern = NULL; + g_autofree gchar *ciev_regex = NULL; + MMPortSerialAt *primary_port; + MMPortSerialAt *secondary_port; primary_port = mm_base_modem_peek_port_primary (MM_BASE_MODEM (self)); mm_obj_dbg (self, "setting up simind 'CIEV: %d' events handler", simind_idx); @@ -1149,9 +1149,6 @@ ublox_setup_ciev_handler (MMIfaceModem *self, (MMPortSerialAtUnsolicitedMsgFn) ublox_ciev_unsolicited_handler, self, NULL); - - g_regex_unref (pattern); - g_free (ciev_regex); } static void diff --git a/plugins/ublox/mm-modem-helpers-ublox.c b/plugins/ublox/mm-modem-helpers-ublox.c index bb0e02ac..5cc03542 100644 --- a/plugins/ublox/mm-modem-helpers-ublox.c +++ b/plugins/ublox/mm-modem-helpers-ublox.c @@ -31,14 +31,14 @@ mm_ublox_parse_upincnt_response (const gchar *response, guint *out_puk2_attempts, GError **error) { - GRegex *r; - GMatchInfo *match_info; - GError *inner_error = NULL; - guint pin_attempts = 0; - guint pin2_attempts = 0; - guint puk_attempts = 0; - guint puk2_attempts = 0; - gboolean success = TRUE; + g_autoptr(GRegex) r = NULL; + g_autoptr(GMatchInfo) match_info = NULL; + GError *inner_error = NULL; + guint pin_attempts = 0; + guint pin2_attempts = 0; + guint puk_attempts = 0; + guint puk2_attempts = 0; + gboolean success = TRUE; g_assert (out_pin_attempts); g_assert (out_pin2_attempts); @@ -78,9 +78,6 @@ mm_ublox_parse_upincnt_response (const gchar *response, out: - g_match_info_free (match_info); - g_regex_unref (r); - if (inner_error) { g_propagate_error (error, inner_error); return FALSE; @@ -107,10 +104,10 @@ mm_ublox_parse_uusbconf_response (const gchar *response, MMUbloxUsbProfile *out_profile, GError **error) { - GRegex *r; - GMatchInfo *match_info; - GError *inner_error = NULL; - MMUbloxUsbProfile profile = MM_UBLOX_USB_PROFILE_UNKNOWN; + g_autoptr(GRegex) r = NULL; + g_autoptr(GMatchInfo) match_info = NULL; + GError *inner_error = NULL; + MMUbloxUsbProfile profile = MM_UBLOX_USB_PROFILE_UNKNOWN; g_assert (out_profile != NULL); @@ -127,7 +124,7 @@ mm_ublox_parse_uusbconf_response (const gchar *response, g_regex_match_full (r, response, strlen (response), 0, 0, &match_info, &inner_error); if (!inner_error && g_match_info_matches (match_info)) { - gchar *profile_name; + g_autofree gchar *profile_name = NULL; profile_name = mm_get_string_unquoted_from_match_info (match_info, 2); if (profile_name && profile_name[0]) { @@ -140,12 +137,8 @@ mm_ublox_parse_uusbconf_response (const gchar *response, "Unknown USB profile: '%s'", profile_name); } else profile = MM_UBLOX_USB_PROFILE_BACK_COMPATIBLE; - g_free (profile_name); } - g_match_info_free (match_info); - g_regex_unref (r); - if (inner_error) { g_propagate_error (error, inner_error); return FALSE; @@ -169,10 +162,10 @@ mm_ublox_parse_ubmconf_response (const gchar *response, MMUbloxNetworkingMode *out_mode, GError **error) { - GRegex *r; - GMatchInfo *match_info; - GError *inner_error = NULL; - MMUbloxNetworkingMode mode = MM_UBLOX_NETWORKING_MODE_UNKNOWN; + g_autoptr(GRegex) r = NULL; + g_autoptr(GMatchInfo) match_info = NULL; + GError *inner_error = NULL; + MMUbloxNetworkingMode mode = MM_UBLOX_NETWORKING_MODE_UNKNOWN; g_assert (out_mode != NULL); @@ -203,9 +196,6 @@ mm_ublox_parse_ubmconf_response (const gchar *response, } } - g_match_info_free (match_info); - g_regex_unref (r); - if (inner_error) { g_propagate_error (error, inner_error); return FALSE; @@ -234,15 +224,15 @@ mm_ublox_parse_uipaddr_response (const gchar *response, gchar **out_ipv6_link_local_address, GError **error) { - GRegex *r; - GMatchInfo *match_info; - GError *inner_error = NULL; - guint cid = 0; - gchar *if_name = NULL; - gchar *ipv4_address = NULL; - gchar *ipv4_subnet = NULL; - gchar *ipv6_global_address = NULL; - gchar *ipv6_link_local_address = NULL; + g_autoptr(GRegex) r = NULL; + g_autoptr(GMatchInfo) match_info = NULL; + GError *inner_error = NULL; + guint cid = 0; + gchar *if_name = NULL; + gchar *ipv4_address = NULL; + gchar *ipv4_subnet = NULL; + gchar *ipv6_global_address = NULL; + gchar *ipv6_link_local_address = NULL; /* Response may be e.g.: * +UIPADDR: 1,"ccinet0","5.168.120.13","255.255.255.0","","" @@ -288,10 +278,6 @@ mm_ublox_parse_uipaddr_response (const gchar *response, ipv6_link_local_address = mm_get_string_unquoted_from_match_info (match_info, 6); out: - - g_match_info_free (match_info); - g_regex_unref (r); - if (inner_error) { g_free (if_name); g_free (ipv4_address); @@ -1550,11 +1536,11 @@ GArray * mm_ublox_parse_uact_response (const gchar *response, GError **error) { - GRegex *r; - GMatchInfo *match_info; - GError *inner_error = NULL; - GArray *nums = NULL; - GArray *bands = NULL; + g_autoptr(GRegex) r = NULL; + g_autoptr(GMatchInfo) match_info = NULL; + GError *inner_error = NULL; + GArray *nums = NULL; + GArray *bands = NULL; /* * AT+UACT? @@ -1566,16 +1552,12 @@ mm_ublox_parse_uact_response (const gchar *response, g_regex_match_full (r, response, strlen (response), 0, 0, &match_info, &inner_error); if (!inner_error && g_match_info_matches (match_info)) { - gchar *bandstr; + g_autofree gchar *bandstr = NULL; bandstr = mm_get_string_unquoted_from_match_info (match_info, 4); nums = mm_parse_uint_list (bandstr, &inner_error); - g_free (bandstr); } - g_match_info_free (match_info); - g_regex_unref (r); - if (inner_error) { g_propagate_error (error, inner_error); return NULL; @@ -1632,16 +1614,16 @@ mm_ublox_parse_uact_test (const gchar *response, GArray **bands4g_out, GError **error) { - GRegex *r; - GMatchInfo *match_info; - GError *inner_error = NULL; - const gchar *bands2g_str = NULL; - const gchar *bands3g_str = NULL; - const gchar *bands4g_str = NULL; - GArray *bands2g = NULL; - GArray *bands3g = NULL; - GArray *bands4g = NULL; - gchar **split = NULL; + g_autoptr(GRegex) r = NULL; + g_autoptr(GMatchInfo) match_info = NULL; + g_auto(GStrv) split = NULL; + GError *inner_error = NULL; + const gchar *bands2g_str = NULL; + const gchar *bands3g_str = NULL; + const gchar *bands4g_str = NULL; + GArray *bands2g = NULL; + GArray *bands3g = NULL; + GArray *bands4g = NULL; g_assert (bands2g_out && bands3g_out && bands4g_out); @@ -1658,8 +1640,8 @@ mm_ublox_parse_uact_test (const gchar *response, goto out; if (g_match_info_matches (match_info)) { - gchar *aux; - guint n_groups; + g_autofree gchar *aux = NULL; + guint n_groups; aux = mm_get_string_unquoted_from_match_info (match_info, 4); split = mm_split_string_groups (aux); @@ -1670,7 +1652,6 @@ mm_ublox_parse_uact_test (const gchar *response, bands3g_str = split[1]; if (n_groups >= 3) bands4g_str = split[2]; - g_free (aux); } if (!bands2g_str && !bands3g_str && !bands4g_str) { @@ -1692,10 +1673,6 @@ mm_ublox_parse_uact_test (const gchar *response, /* success */ out: - g_strfreev (split); - g_match_info_free (match_info); - g_regex_unref (r); - if (inner_error) { if (bands2g) g_array_unref (bands2g); @@ -1760,13 +1737,13 @@ mm_ublox_parse_urat_read_response (const gchar *response, MMModemMode *out_preferred, GError **error) { - GRegex *r; - GMatchInfo *match_info; - GError *inner_error = NULL; - MMModemMode allowed = MM_MODEM_MODE_NONE; - MMModemMode preferred = MM_MODEM_MODE_NONE; - gchar *allowed_str = NULL; - gchar *preferred_str = NULL; + g_autoptr(GRegex) r = NULL; + g_autoptr(GMatchInfo) match_info = NULL; + GError *inner_error = NULL; + MMModemMode allowed = MM_MODEM_MODE_NONE; + MMModemMode preferred = MM_MODEM_MODE_NONE; + g_autofree gchar *allowed_str = NULL; + g_autofree gchar *preferred_str = NULL; g_assert (out_allowed != NULL && out_preferred != NULL); @@ -1821,13 +1798,6 @@ mm_ublox_parse_urat_read_response (const gchar *response, } out: - - g_free (allowed_str); - g_free (preferred_str); - - g_match_info_free (match_info); - g_regex_unref (r); - if (inner_error) { g_propagate_error (error, inner_error); return FALSE; @@ -1981,14 +1951,14 @@ mm_ublox_parse_ugcntrd_response_for_cid (const gchar *response, guint64 *out_total_rx_bytes, GError **error) { - GRegex *r; - GMatchInfo *match_info = NULL; - GError *inner_error = NULL; - guint64 session_tx_bytes = 0; - guint64 session_rx_bytes = 0; - guint64 total_tx_bytes = 0; - guint64 total_rx_bytes = 0; - gboolean matched = FALSE; + g_autoptr(GRegex) r = NULL; + g_autoptr(GMatchInfo) match_info = NULL; + GError *inner_error = NULL; + guint64 session_tx_bytes = 0; + guint64 session_rx_bytes = 0; + guint64 total_tx_bytes = 0; + guint64 total_rx_bytes = 0; + gboolean matched = FALSE; /* Response may be e.g.: * +UGCNTRD: 31,2704,1819,2724,1839 @@ -2044,10 +2014,6 @@ mm_ublox_parse_ugcntrd_response_for_cid (const gchar *response, } out: - - g_match_info_free (match_info); - g_regex_unref (r); - if (inner_error) { g_propagate_error (error, inner_error); return FALSE; diff --git a/plugins/via/mm-broadband-modem-via.c b/plugins/via/mm-broadband-modem-via.c index 6a8b4508..896db8cd 100644 --- a/plugins/via/mm-broadband-modem-via.c +++ b/plugins/via/mm-broadband-modem-via.c @@ -153,7 +153,7 @@ get_detailed_registration_state_finish (MMIfaceModemCdma *self, MMModemCdmaRegistrationState *detailed_evdo_state, GError **error) { - DetailedRegistrationStateResults *results; + g_autofree DetailedRegistrationStateResults *results = NULL; results = g_task_propagate_pointer (G_TASK (res), error); if (!results) @@ -161,7 +161,6 @@ get_detailed_registration_state_finish (MMIfaceModemCdma *self, *detailed_cdma1x_state = results->detailed_cdma1x_state; *detailed_evdo_state = results->detailed_evdo_state; - g_free (results); return TRUE; } @@ -171,13 +170,13 @@ sysinfo_ready (MMBaseModem *self, GTask *task) { - DetailedRegistrationStateResults *ctx; - DetailedRegistrationStateResults *results; - const gchar *response; - GRegex *r; - GMatchInfo *match_info; - MMModemCdmaRegistrationState reg_state; - guint val = 0; + DetailedRegistrationStateResults *ctx; + g_autofree DetailedRegistrationStateResults *results = NULL; + const gchar *response; + g_autoptr(GRegex) r = NULL; + g_autoptr(GMatchInfo) match_info = NULL; + MMModemCdmaRegistrationState reg_state; + guint val = 0; ctx = g_task_get_task_data (task); @@ -236,11 +235,8 @@ sysinfo_ready (MMBaseModem *self, results->detailed_cdma1x_state = reg_state; } - g_match_info_free (match_info); - g_regex_unref (r); - out: - g_task_return_pointer (task, results, NULL); + g_task_return_pointer (task, g_steal_pointer (&results), g_free); g_object_unref (task); } diff --git a/plugins/wavecom/mm-broadband-modem-wavecom.c b/plugins/wavecom/mm-broadband-modem-wavecom.c index 8659e1c4..521e72de 100644 --- a/plugins/wavecom/mm-broadband-modem-wavecom.c +++ b/plugins/wavecom/mm-broadband-modem-wavecom.c @@ -1223,9 +1223,9 @@ modem_power_off (MMIfaceModem *self, static void setup_ports (MMBroadbandModem *self) { - gpointer parser; - MMPortSerialAt *primary; - GRegex *regex; + gpointer parser; + MMPortSerialAt *primary; + g_autoptr(GRegex) regex = NULL; /* Call parent's setup ports first always */ MM_BROADBAND_MODEM_CLASS (mm_broadband_modem_wavecom_parent_class)->setup_ports (self); @@ -1242,7 +1242,6 @@ setup_ports (MMBroadbandModem *self) G_REGEX_RAW | G_REGEX_OPTIMIZE, 0, NULL); mm_serial_parser_v1_set_custom_regex (parser, regex, NULL); - g_regex_unref (regex); mm_port_serial_at_set_response_parser (MM_PORT_SERIAL_AT (primary), mm_serial_parser_v1_parse, diff --git a/plugins/x22x/mm-broadband-modem-x22x.c b/plugins/x22x/mm-broadband-modem-x22x.c index c4744262..1ce32f57 100644 --- a/plugins/x22x/mm-broadband-modem-x22x.c +++ b/plugins/x22x/mm-broadband-modem-x22x.c @@ -120,12 +120,12 @@ load_current_modes_finish (MMIfaceModem *self, MMModemMode *preferred, GError **error) { - GRegex *r; - GMatchInfo *match_info; - const gchar *response; - gchar *str; - gint mode = -1; - GError *match_error = NULL; + g_autoptr(GRegex) r = NULL; + g_autoptr(GMatchInfo) match_info = NULL; + const gchar *response; + gchar *str; + gint mode = -1; + GError *match_error = NULL; response = mm_base_modem_at_command_finish (MM_BASE_MODEM (self), res, error); if (!response) @@ -143,17 +143,12 @@ load_current_modes_finish (MMIfaceModem *self, MM_CORE_ERROR_FAILED, "Couldn't match +SYSSEL reply: %s", response); } - - g_match_info_free (match_info); - g_regex_unref (r); return FALSE; } str = g_match_info_fetch (match_info, 3); mode = atoi (str); g_free (str); - g_match_info_free (match_info); - g_regex_unref (r); switch (mode) { case 0: diff --git a/plugins/xmm/mm-modem-helpers-xmm.c b/plugins/xmm/mm-modem-helpers-xmm.c index 9b3933d2..70e02a8f 100644 --- a/plugins/xmm/mm-modem-helpers-xmm.c +++ b/plugins/xmm/mm-modem-helpers-xmm.c @@ -364,11 +364,11 @@ mm_xmm_parse_xact_query_response (const gchar *response, GArray **bands_out, GError **error) { - GRegex *r; - GMatchInfo *match_info; - GError *inner_error = NULL; - GArray *bands = NULL; - guint i; + g_autoptr(GRegex) r = NULL; + g_autoptr(GMatchInfo) match_info = NULL; + GError *inner_error = NULL; + GArray *bands = NULL; + guint i; MMModemModeCombination mode = { .allowed = MM_MODEM_MODE_NONE, @@ -450,9 +450,6 @@ mm_xmm_parse_xact_query_response (const gchar *response, /* success */ out: - g_match_info_free (match_info); - g_regex_unref (r); - if (inner_error) { if (bands) g_array_unref (bands); @@ -609,17 +606,17 @@ mm_xmm_parse_xcesq_query_response (const gchar *response, gint *out_rssnr, GError **error) { - GRegex *r; - GMatchInfo *match_info; - GError *inner_error = NULL; - guint rxlev = 99; - guint ber = 99; - guint rscp = 255; - guint ecn0 = 255; - guint rsrq = 255; - guint rsrp = 255; - gint rssnr = 255; - gboolean success = FALSE; + g_autoptr(GRegex) r = NULL; + g_autoptr(GMatchInfo) match_info = NULL; + GError *inner_error = NULL; + guint rxlev = 99; + guint ber = 99; + guint rscp = 255; + guint ecn0 = 255; + guint rsrq = 255; + guint rsrp = 255; + gint rssnr = 255; + gboolean success = FALSE; g_assert (out_rxlev); g_assert (out_ber); @@ -672,9 +669,6 @@ mm_xmm_parse_xcesq_query_response (const gchar *response, } out: - g_match_info_free (match_info); - g_regex_unref (r); - if (inner_error) { g_propagate_error (error, inner_error); return FALSE; @@ -959,11 +953,11 @@ mm_xmm_parse_xlcsslp_query_response (const gchar *response, gchar **supl_address, GError **error) { - GRegex *r; - GMatchInfo *match_info; - GError *inner_error = NULL; - gchar *address = NULL; - guint port = 0; + g_autoptr(GRegex) r = NULL; + g_autoptr(GMatchInfo) match_info = NULL; + GError *inner_error = NULL; + gchar *address = NULL; + guint port = 0; /* * E.g.: @@ -996,9 +990,6 @@ mm_xmm_parse_xlcsslp_query_response (const gchar *response, } out: - g_match_info_free (match_info); - g_regex_unref (r); - if (inner_error) { g_propagate_error (error, inner_error); return FALSE; diff --git a/plugins/zte/mm-broadband-modem-zte.c b/plugins/zte/mm-broadband-modem-zte.c index f4cb774d..35283531 100644 --- a/plugins/zte/mm-broadband-modem-zte.c +++ b/plugins/zte/mm-broadband-modem-zte.c @@ -339,22 +339,20 @@ load_current_modes_finish (MMIfaceModem *self, MMModemMode *preferred, GError **error) { - const gchar *response; - GMatchInfo *match_info = NULL; - GRegex *r; - gint cm_mode = -1; - gint pref_acq = -1; - gboolean result; - GError *match_error = NULL; + const gchar *response; + g_autoptr(GMatchInfo) match_info = NULL; + g_autoptr(GRegex) r = NULL; + gint cm_mode = -1; + gint pref_acq = -1; + GError *match_error = NULL; response = mm_base_modem_at_command_finish (MM_BASE_MODEM (self), res, error); if (!response) return FALSE; - r = g_regex_new ("\\+ZSNT:\\s*(\\d),(\\d),(\\d)", G_REGEX_UNGREEDY, 0, error); + r = g_regex_new ("\\+ZSNT:\\s*(\\d),(\\d),(\\d)", G_REGEX_UNGREEDY, 0, NULL); g_assert (r != NULL); - result = FALSE; if (!g_regex_match_full (r, response, strlen (response), 0, 0, &match_info, &match_error)) { if (match_error) g_propagate_error (error, match_error); @@ -364,7 +362,7 @@ load_current_modes_finish (MMIfaceModem *self, MM_CORE_ERROR_FAILED, "Couldn't parse +ZSNT response: '%s'", response); - goto done; + return FALSE; } if (!mm_get_int_from_match_info (match_info, 1, &cm_mode) || @@ -376,11 +374,10 @@ load_current_modes_finish (MMIfaceModem *self, MM_CORE_ERROR_FAILED, "Failed to parse the allowed mode response: '%s'", response); - goto done; + return FALSE; } /* Correctly parsed! */ - result = TRUE; if (cm_mode == 0) { /* Both 2G, 3G and LTE allowed. For LTE modems, no 2G/3G preference supported. */ if (pref_acq == 0 || mm_iface_modem_is_3gpp_lte (self)) { @@ -410,12 +407,7 @@ load_current_modes_finish (MMIfaceModem *self, } else g_assert_not_reached (); -done: - g_match_info_free (match_info); - if (r) - g_regex_unref (r); - - return result; + return TRUE; } static void |