aboutsummaryrefslogtreecommitdiff
path: root/src/mm-modem-helpers.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/mm-modem-helpers.c')
-rw-r--r--src/mm-modem-helpers.c538
1 files changed, 212 insertions, 326 deletions
diff --git a/src/mm-modem-helpers.c b/src/mm-modem-helpers.c
index 5e58ba9d..58207bb1 100644
--- a/src/mm-modem-helpers.c
+++ b/src/mm-modem-helpers.c
@@ -528,10 +528,10 @@ mm_3gpp_parse_clcc_response (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 call_direction[] = {
[0] = MM_CALL_DIRECTION_OUTGOING,
@@ -641,9 +641,6 @@ mm_3gpp_parse_clcc_response (const gchar *str,
}
out:
- g_clear_pointer (&match_info, g_match_info_free);
- g_regex_unref (r);
-
if (inner_error) {
mm_3gpp_call_info_list_free (list);
g_propagate_error (error, inner_error);
@@ -736,12 +733,12 @@ mm_parse_ifc_test_response (const gchar *response,
gpointer log_object,
GError **error)
{
- GRegex *r;
- GError *inner_error = NULL;
- GMatchInfo *match_info = NULL;
- MMFlowControl te_mask = MM_FLOW_CONTROL_UNKNOWN;
- MMFlowControl ta_mask = MM_FLOW_CONTROL_UNKNOWN;
- MMFlowControl mask = MM_FLOW_CONTROL_UNKNOWN;
+ g_autoptr(GRegex) r = NULL;
+ g_autoptr(GMatchInfo) match_info = NULL;
+ GError *inner_error = NULL;
+ MMFlowControl te_mask = MM_FLOW_CONTROL_UNKNOWN;
+ MMFlowControl ta_mask = MM_FLOW_CONTROL_UNKNOWN;
+ MMFlowControl mask = MM_FLOW_CONTROL_UNKNOWN;
r = g_regex_new ("(?:\\+IFC:)?\\s*\\((.*)\\),\\((.*)\\)(?:\\r\\n)?", 0, 0, NULL);
g_assert (r != NULL);
@@ -767,10 +764,6 @@ mm_parse_ifc_test_response (const gchar *response,
mask = te_mask & ta_mask;
out:
-
- g_clear_pointer (&match_info, g_match_info_free);
- g_regex_unref (r);
-
if (inner_error)
g_propagate_error (error, inner_error);
@@ -982,21 +975,21 @@ mm_3gpp_parse_ws46_test_response (const gchar *response,
gpointer log_object,
GError **error)
{
- GArray *modes = NULL;
- GArray *tech_values = NULL;
- GRegex *r;
- GError *inner_error = NULL;
- GMatchInfo *match_info = NULL;
- gchar *full_list = NULL;
- guint val;
- guint i;
- guint j;
- gboolean supported_5g = FALSE;
- gboolean supported_4g = FALSE;
- gboolean supported_3g = FALSE;
- gboolean supported_2g = FALSE;
- gboolean supported_mode_25 = FALSE;
- gboolean supported_mode_29 = FALSE;
+ g_autoptr(GRegex) r = NULL;
+ g_autoptr(GMatchInfo) match_info = NULL;
+ GArray *modes = NULL;
+ GArray *tech_values = NULL;
+ GError *inner_error = NULL;
+ gchar *full_list = NULL;
+ guint val;
+ guint i;
+ guint j;
+ gboolean supported_5g = FALSE;
+ gboolean supported_4g = FALSE;
+ gboolean supported_3g = FALSE;
+ gboolean supported_2g = FALSE;
+ gboolean supported_mode_25 = FALSE;
+ gboolean supported_mode_29 = FALSE;
r = g_regex_new ("(?:\\+WS46:)?\\s*\\((.*)\\)(?:\\r\\n)?", 0, 0, NULL);
g_assert (r != NULL);
@@ -1095,9 +1088,6 @@ out:
g_free (full_list);
- g_clear_pointer (&match_info, g_match_info_free);
- g_regex_unref (r);
-
if (inner_error) {
g_propagate_error (error, inner_error);
return NULL;
@@ -1190,10 +1180,10 @@ mm_3gpp_parse_cops_test_response (const gchar *reply,
gpointer log_object,
GError **error)
{
- GRegex *r;
- GList *info_list = NULL;
- GMatchInfo *match_info;
- gboolean umts_format = TRUE;
+ g_autoptr(GRegex) r = NULL;
+ g_autoptr(GMatchInfo) match_info = NULL;
+ GList *info_list = NULL;
+ gboolean umts_format = TRUE;
g_return_val_if_fail (reply != NULL, NULL);
if (error)
@@ -1227,9 +1217,8 @@ mm_3gpp_parse_cops_test_response (const gchar *reply,
/* If we didn't get any hits, try the pre-UMTS format match */
if (!g_regex_match (r, reply, 0, &match_info)) {
- g_regex_unref (r);
- g_match_info_free (match_info);
- match_info = NULL;
+ g_clear_pointer (&r, g_regex_unref);
+ g_clear_pointer (&match_info, g_match_info_free);
/* Pre-UMTS format doesn't include the cell access technology after
* the numeric operator element.
@@ -1320,9 +1309,6 @@ mm_3gpp_parse_cops_test_response (const gchar *reply,
g_match_info_next (match_info, NULL);
}
- g_match_info_free (match_info);
- g_regex_unref (r);
-
return info_list;
}
@@ -1337,14 +1323,14 @@ mm_3gpp_parse_cops_read_response (const gchar *response,
gpointer log_object,
GError **error)
{
- GRegex *r;
- GMatchInfo *match_info;
- GError *inner_error = NULL;
- guint mode = 0;
- guint format = 0;
- gchar *operator = NULL;
- guint actval = 0;
- MMModemAccessTechnology act = MM_MODEM_ACCESS_TECHNOLOGY_UNKNOWN;
+ g_autoptr(GRegex) r = NULL;
+ g_autoptr(GMatchInfo) match_info = NULL;
+ GError *inner_error = NULL;
+ guint mode = 0;
+ guint format = 0;
+ gchar *operator = NULL;
+ guint actval = 0;
+ MMModemAccessTechnology act = MM_MODEM_ACCESS_TECHNOLOGY_UNKNOWN;
g_assert (out_mode || out_format || out_operator || out_act);
@@ -1390,9 +1376,6 @@ mm_3gpp_parse_cops_read_response (const gchar *response,
}
out:
- g_match_info_free (match_info);
- g_regex_unref (r);
-
if (inner_error) {
g_free (operator);
g_propagate_error (error, inner_error);
@@ -1725,10 +1708,10 @@ mm_3gpp_parse_cgdcont_test_response (const gchar *response,
gpointer log_object,
GError **error)
{
- GRegex *r;
- GMatchInfo *match_info;
- GError *inner_error = NULL;
- GList *list = NULL;
+ g_autoptr(GRegex) r = NULL;
+ g_autoptr(GMatchInfo) match_info = NULL;
+ GError *inner_error = NULL;
+ GList *list = NULL;
if (!response || !g_str_has_prefix (response, "+CGDCONT:")) {
g_set_error (error, MM_CORE_ERROR, MM_CORE_ERROR_FAILED, "Missing +CGDCONT prefix");
@@ -1776,9 +1759,6 @@ mm_3gpp_parse_cgdcont_test_response (const gchar *response,
g_match_info_next (match_info, &inner_error);
}
- g_match_info_free (match_info);
- g_regex_unref (r);
-
if (inner_error) {
mm_obj_warn (log_object, "unexpected error matching +CGDCONT response: '%s'", inner_error->message);
g_error_free (inner_error);
@@ -1813,52 +1793,46 @@ GList *
mm_3gpp_parse_cgdcont_read_response (const gchar *reply,
GError **error)
{
- GError *inner_error = NULL;
- GRegex *r;
- GMatchInfo *match_info;
- GList *list;
+ GError *inner_error = NULL;
+ g_autoptr(GRegex) r = NULL;
+ g_autoptr(GMatchInfo) match_info = NULL;
+ GList *list = NULL;
if (!reply || !reply[0])
/* No APNs configured, all done */
return NULL;
- list = NULL;
r = g_regex_new ("\\+CGDCONT:\\s*(\\d+)\\s*,([^, \\)]*)\\s*,([^, \\)]*)\\s*,([^, \\)]*)",
G_REGEX_DOLLAR_ENDONLY | G_REGEX_RAW,
- 0, &inner_error);
- if (r) {
- g_regex_match_full (r, reply, strlen (reply), 0, 0, &match_info, &inner_error);
-
- while (!inner_error &&
- g_match_info_matches (match_info)) {
- gchar *str;
- MMBearerIpFamily ip_family;
-
- str = mm_get_string_unquoted_from_match_info (match_info, 2);
- ip_family = mm_3gpp_get_ip_family_from_pdp_type (str);
- if (ip_family != MM_BEARER_IP_FAMILY_NONE) {
- MM3gppPdpContext *pdp;
-
- pdp = g_slice_new0 (MM3gppPdpContext);
- if (!mm_get_uint_from_match_info (match_info, 1, &pdp->cid)) {
- inner_error = g_error_new (MM_CORE_ERROR,
- MM_CORE_ERROR_FAILED,
- "Couldn't parse CID from reply: '%s'",
- reply);
- break;
- }
- pdp->pdp_type = ip_family;
- pdp->apn = mm_get_string_unquoted_from_match_info (match_info, 3);
+ 0, NULL);
+ g_assert (r);
- list = g_list_prepend (list, pdp);
+ g_regex_match_full (r, reply, strlen (reply), 0, 0, &match_info, &inner_error);
+ while (!inner_error && g_match_info_matches (match_info)) {
+ gchar *str;
+ MMBearerIpFamily ip_family;
+
+ str = mm_get_string_unquoted_from_match_info (match_info, 2);
+ ip_family = mm_3gpp_get_ip_family_from_pdp_type (str);
+ if (ip_family != MM_BEARER_IP_FAMILY_NONE) {
+ MM3gppPdpContext *pdp;
+
+ pdp = g_slice_new0 (MM3gppPdpContext);
+ if (!mm_get_uint_from_match_info (match_info, 1, &pdp->cid)) {
+ inner_error = g_error_new (MM_CORE_ERROR,
+ MM_CORE_ERROR_FAILED,
+ "Couldn't parse CID from reply: '%s'",
+ reply);
+ break;
}
+ pdp->pdp_type = ip_family;
+ pdp->apn = mm_get_string_unquoted_from_match_info (match_info, 3);
- g_free (str);
- g_match_info_next (match_info, &inner_error);
+ list = g_list_prepend (list, pdp);
}
- g_match_info_free (match_info);
- g_regex_unref (r);
+ g_free (str);
+ g_match_info_next (match_info, &inner_error);
}
if (inner_error) {
@@ -1868,9 +1842,7 @@ mm_3gpp_parse_cgdcont_read_response (const gchar *reply,
return NULL;
}
- list = g_list_sort (list, (GCompareFunc)mm_3gpp_pdp_context_cmp);
-
- return list;
+ return g_list_sort (list, (GCompareFunc)mm_3gpp_pdp_context_cmp);
}
/*************************************************************************/
@@ -1898,16 +1870,15 @@ GList *
mm_3gpp_parse_cgact_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 ("\\+CGACT:\\s*(\\d+),(\\d+)",
G_REGEX_DOLLAR_ENDONLY | G_REGEX_RAW, 0, &inner_error);
g_assert (r);
@@ -1941,9 +1912,6 @@ mm_3gpp_parse_cgact_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);
@@ -2142,10 +2110,11 @@ mm_3gpp_parse_cmgf_test_response (const gchar *reply,
gboolean *sms_text_supported,
GError **error)
{
- GRegex *r;
- GMatchInfo *match_info;
- gchar *s;
- guint32 min = -1, max = -1;
+ g_autoptr(GRegex) r = NULL;
+ g_autoptr(GMatchInfo) match_info = NULL;
+ gchar *s;
+ guint32 min = -1;
+ guint32 max = -1;
/* Strip whitespace and response tag */
if (g_str_has_prefix (reply, CMGF_TAG))
@@ -2163,8 +2132,6 @@ mm_3gpp_parse_cmgf_test_response (const gchar *reply,
MM_CORE_ERROR_FAILED,
"Failed to parse CMGF query result '%s'",
reply);
- g_match_info_free (match_info);
- g_regex_unref (r);
return FALSE;
}
@@ -2184,8 +2151,6 @@ mm_3gpp_parse_cmgf_test_response (const gchar *reply,
/* CMGF=1 for Text mode */
*sms_text_supported = (max >= 1);
- g_match_info_free (match_info);
- g_regex_unref (r);
return TRUE;
}
@@ -2196,12 +2161,12 @@ mm_3gpp_parse_cmgr_read_response (const gchar *reply,
guint index,
GError **error)
{
- GRegex *r;
- GMatchInfo *match_info;
- gint count;
- gint status;
- gchar *pdu;
- MM3gppPduInfo *info = NULL;
+ g_autoptr(GRegex) r = NULL;
+ g_autoptr(GMatchInfo) match_info = NULL;
+ gint count;
+ gint status;
+ gchar *pdu;
+ MM3gppPduInfo *info = NULL;
/* +CMGR: <stat>,<alpha>,<length>(whitespace)<pdu> */
/* The <alpha> and <length> fields are matched, but not currently used */
@@ -2214,7 +2179,7 @@ mm_3gpp_parse_cmgr_read_response (const gchar *reply,
MM_CORE_ERROR_FAILED,
"Failed to parse CMGR read result: response didn't match '%s'",
reply);
- goto done;
+ return NULL;
}
/* g_match_info_get_match_count includes match #0 */
@@ -2225,7 +2190,7 @@ mm_3gpp_parse_cmgr_read_response (const gchar *reply,
"Failed to match CMGR fields (matched %d) '%s'",
count,
reply);
- goto done;
+ return NULL;
}
if (!mm_get_int_from_match_info (match_info, 1, &status)) {
@@ -2234,7 +2199,7 @@ mm_3gpp_parse_cmgr_read_response (const gchar *reply,
MM_CORE_ERROR_FAILED,
"Failed to extract CMGR status field '%s'",
reply);
- goto done;
+ return NULL;
}
@@ -2245,18 +2210,13 @@ mm_3gpp_parse_cmgr_read_response (const gchar *reply,
MM_CORE_ERROR_FAILED,
"Failed to extract CMGR pdu field '%s'",
reply);
- goto done;
+ return NULL;
}
info = g_new0 (MM3gppPduInfo, 1);
info->index = index;
info->status = status;
info->pdu = pdu;
-
-done:
- g_match_info_free (match_info);
- g_regex_unref (r);
-
return info;
}
@@ -2270,8 +2230,8 @@ mm_3gpp_parse_crsm_response (const gchar *reply,
gchar **hex,
GError **error)
{
- GRegex *r;
- GMatchInfo *match_info;
+ g_autoptr(GRegex) r = NULL;
+ g_autoptr(GMatchInfo) match_info = NULL;
g_assert (sw1 != NULL);
g_assert (sw2 != NULL);
@@ -2292,11 +2252,9 @@ mm_3gpp_parse_crsm_response (const gchar *reply,
if (g_regex_match (r, reply, 0, &match_info) &&
mm_get_uint_from_match_info (match_info, 1, sw1) &&
- mm_get_uint_from_match_info (match_info, 2, sw2))
+ mm_get_uint_from_match_info (match_info, 2, sw2)) {
*hex = mm_get_string_unquoted_from_match_info (match_info, 3);
-
- g_match_info_free (match_info);
- g_regex_unref (r);
+ }
if (*hex == NULL) {
g_set_error (error,
@@ -2372,19 +2330,19 @@ mm_3gpp_parse_cgcontrdp_response (const gchar *response,
gchar **out_dns_secondary_address,
GError **error)
{
- GRegex *r;
- GMatchInfo *match_info;
- GError *inner_error = NULL;
- guint cid = 0;
- guint bearer_id = 0;
- gchar *apn = NULL;
- gchar *local_address_and_subnet = NULL;
- gchar *local_address = NULL;
- gchar *subnet = NULL;
- gchar *gateway_address = NULL;
- gchar *dns_primary_address = NULL;
- gchar *dns_secondary_address = NULL;
- guint field_format_extra_index = 0;
+ g_autoptr(GRegex) r = NULL;
+ g_autoptr(GMatchInfo) match_info = NULL;
+ GError *inner_error = NULL;
+ guint cid = 0;
+ guint bearer_id = 0;
+ gchar *apn = NULL;
+ gchar *local_address_and_subnet = NULL;
+ gchar *local_address = NULL;
+ gchar *subnet = NULL;
+ gchar *gateway_address = NULL;
+ gchar *dns_primary_address = NULL;
+ gchar *dns_secondary_address = NULL;
+ guint field_format_extra_index = 0;
/* Response may be e.g.:
* +CGCONTRDP: 4,5,"ibox.tim.it.mnc001.mcc222.gprs","2.197.17.49.255.255.255.255","2.197.17.49","10.207.43.46","10.206.56.132","0.0.0.0","0.0.0.0",0
@@ -2462,9 +2420,6 @@ mm_3gpp_parse_cgcontrdp_response (const gchar *response,
dns_secondary_address = mm_get_string_unquoted_from_match_info (match_info, 7 + field_format_extra_index);
out:
- g_match_info_free (match_info);
- g_regex_unref (r);
-
g_free (local_address_and_subnet);
if (inner_error) {
@@ -2513,10 +2468,10 @@ mm_3gpp_parse_cfun_query_response (const gchar *response,
guint *out_state,
GError **error)
{
- GRegex *r;
- GMatchInfo *match_info;
- GError *inner_error = NULL;
- guint state = G_MAXUINT;
+ g_autoptr(GRegex) r = NULL;
+ g_autoptr(GMatchInfo) match_info = NULL;
+ GError *inner_error = NULL;
+ guint state = G_MAXUINT;
g_assert (out_state != NULL);
@@ -2546,9 +2501,6 @@ mm_3gpp_parse_cfun_query_response (const gchar *response,
*out_state = state;
out:
- g_match_info_free (match_info);
- g_regex_unref (r);
-
if (inner_error) {
g_propagate_error (error, inner_error);
return FALSE;
@@ -2570,16 +2522,16 @@ mm_3gpp_parse_cesq_response (const gchar *response,
guint *out_rsrp,
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;
- 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;
+ gboolean success = FALSE;
g_assert (out_rxlev);
g_assert (out_ber);
@@ -2624,9 +2576,6 @@ mm_3gpp_parse_cesq_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;
@@ -2883,10 +2832,10 @@ mm_3gpp_parse_ccwa_service_query_response (const gchar *response,
gboolean *status,
GError **error)
{
- GRegex *r;
- GError *inner_error = NULL;
- GMatchInfo *match_info = NULL;
- gint class_1_status = -1;
+ g_autoptr(GRegex) r = NULL;
+ g_autoptr(GMatchInfo) match_info = NULL;
+ GError *inner_error = NULL;
+ gint class_1_status = -1;
/*
* AT+CCWA=<n>[,<mode>]
@@ -2928,9 +2877,6 @@ mm_3gpp_parse_ccwa_service_query_response (const gchar *response,
}
out:
- g_clear_pointer (&match_info, g_match_info_free);
- g_regex_unref (r);
-
if (inner_error) {
g_propagate_error (error, inner_error);
return FALSE;
@@ -3035,8 +2981,8 @@ mm_3gpp_parse_cpms_test_response (const gchar *reply,
g_assert (r);
for (i = 0; i < N_EXPECTED_GROUPS; i++) {
- GMatchInfo *match_info = NULL;
- GArray *array;
+ g_autoptr(GMatchInfo) match_info = NULL;
+ GArray *array;
/* We always return a valid array, even if it may be empty */
array = g_array_new (FALSE, FALSE, sizeof (MMSmsStorage));
@@ -3058,7 +3004,6 @@ mm_3gpp_parse_cpms_test_response (const gchar *reply,
g_match_info_next (match_info, NULL);
}
}
- g_match_info_free (match_info);
if (!tmp1)
tmp1 = array;
@@ -3100,43 +3045,31 @@ mm_3gpp_parse_cpms_query_response (const gchar *reply,
MMSmsStorage *memw,
GError **error)
{
- GRegex *r = NULL;
- gboolean ret = FALSE;
- GMatchInfo *match_info = NULL;
+ g_autoptr(GRegex) r = NULL;
+ g_autoptr(GMatchInfo) match_info = NULL;
r = g_regex_new (CPMS_QUERY_REGEX, G_REGEX_RAW, 0, NULL);
-
g_assert (r);
if (!g_regex_match (r, reply, 0, &match_info)) {
g_set_error (error, MM_CORE_ERROR, MM_CORE_ERROR_FAILED,
"Could not parse CPMS query response '%s'", reply);
- goto end;
+ return FALSE;
}
if (!g_match_info_matches (match_info)) {
g_set_error (error, MM_CORE_ERROR, MM_CORE_ERROR_FAILED,
"Could not find matches in CPMS query reply '%s'", reply);
- goto end;
- }
-
- if (!mm_3gpp_get_cpms_storage_match (match_info, "memr", memr, error)) {
- goto end;
- }
-
- if (!mm_3gpp_get_cpms_storage_match (match_info, "memw", memw, error)) {
- goto end;
+ return FALSE;
}
- ret = TRUE;
-
-end:
- if (r != NULL)
- g_regex_unref (r);
+ if (!mm_3gpp_get_cpms_storage_match (match_info, "memr", memr, error))
+ return FALSE;
- g_match_info_free (match_info);
+ if (!mm_3gpp_get_cpms_storage_match (match_info, "memw", memw, error))
+ return FALSE;
- return ret;
+ return TRUE;
}
gboolean
@@ -3168,11 +3101,12 @@ gboolean
mm_3gpp_parse_cscs_test_response (const gchar *reply,
MMModemCharset *out_charsets)
{
- MMModemCharset charsets = MM_MODEM_CHARSET_UNKNOWN;
- GRegex *r;
- GMatchInfo *match_info;
- gchar *p, *str;
- gboolean success = FALSE;
+ g_autoptr(GRegex) r = NULL;
+ g_autoptr(GMatchInfo) match_info = NULL;
+ MMModemCharset charsets = MM_MODEM_CHARSET_UNKNOWN;
+ gchar *p;
+ gchar *str;
+ gboolean success = FALSE;
g_return_val_if_fail (reply != NULL, FALSE);
g_return_val_if_fail (out_charsets != NULL, FALSE);
@@ -3194,8 +3128,7 @@ mm_3gpp_parse_cscs_test_response (const gchar *reply,
/* Now parse each charset */
r = g_regex_new ("\\s*([^,\\)]+)\\s*", 0, 0, NULL);
- if (!r)
- return FALSE;
+ g_assert (r);
if (g_regex_match (r, p, 0, &match_info)) {
while (g_match_info_matches (match_info)) {
@@ -3207,8 +3140,6 @@ mm_3gpp_parse_cscs_test_response (const gchar *reply,
success = TRUE;
}
}
- g_match_info_free (match_info);
- g_regex_unref (r);
if (success)
*out_charsets = charsets;
@@ -3222,8 +3153,8 @@ gboolean
mm_3gpp_parse_clck_test_response (const gchar *reply,
MMModem3gppFacility *out_facilities)
{
- GRegex *r;
- GMatchInfo *match_info;
+ g_autoptr(GRegex) r = NULL;
+ g_autoptr(GMatchInfo) match_info = NULL;
g_return_val_if_fail (reply != NULL, FALSE);
g_return_val_if_fail (out_facilities != NULL, FALSE);
@@ -3252,8 +3183,6 @@ mm_3gpp_parse_clck_test_response (const gchar *reply,
g_match_info_next (match_info, NULL);
}
}
- g_match_info_free (match_info);
- g_regex_unref (r);
return (*out_facilities != MM_MODEM_3GPP_FACILITY_NONE);
}
@@ -3264,9 +3193,8 @@ gboolean
mm_3gpp_parse_clck_write_response (const gchar *reply,
gboolean *enabled)
{
- GRegex *r;
- GMatchInfo *match_info;
- gboolean success = FALSE;
+ g_autoptr(GRegex) r = NULL;
+ g_autoptr(GMatchInfo) match_info = NULL;
g_return_val_if_fail (reply != NULL, FALSE);
g_return_val_if_fail (enabled != NULL, FALSE);
@@ -3277,7 +3205,7 @@ mm_3gpp_parse_clck_write_response (const gchar *reply,
g_assert (r != NULL);
if (g_regex_match (r, reply, 0, &match_info)) {
- gchar *str;
+ g_autofree gchar *str = NULL;
str = g_match_info_fetch (match_info, 1);
if (str) {
@@ -3289,15 +3217,11 @@ mm_3gpp_parse_clck_write_response (const gchar *reply,
*enabled = TRUE;
else
g_assert_not_reached ();
-
- g_free (str);
- success = TRUE;
+ return TRUE;
}
}
- g_match_info_free (match_info);
- g_regex_unref (r);
- return success;
+ return FALSE;
}
/*************************************************************************/
@@ -3530,10 +3454,10 @@ GHashTable *
mm_3gpp_parse_cind_test_response (const gchar *reply,
GError **error)
{
- GHashTable *hash;
- GRegex *r;
- GMatchInfo *match_info;
- guint idx = 1;
+ g_autoptr(GRegex) r = NULL;
+ g_autoptr(GMatchInfo) match_info = NULL;
+ GHashTable *hash;
+ guint idx = 1;
g_return_val_if_fail (reply != NULL, NULL);
@@ -3544,12 +3468,7 @@ mm_3gpp_parse_cind_test_response (const gchar *reply,
reply++;
r = g_regex_new ("\\(([^,]*),\\((\\d+)[-,](\\d+).*\\)", G_REGEX_UNGREEDY, 0, NULL);
- if (!r) {
- g_set_error_literal (error,
- MM_CORE_ERROR, MM_CORE_ERROR_FAILED,
- "Could not parse scan results.");
- return NULL;
- }
+ g_assert (r);
hash = g_hash_table_new_full (g_str_hash, g_str_equal, g_free, (GDestroyNotify) cind_response_free);
@@ -3578,8 +3497,6 @@ mm_3gpp_parse_cind_test_response (const gchar *reply,
g_match_info_next (match_info, NULL);
}
}
- g_match_info_free (match_info);
- g_regex_unref (r);
return hash;
}
@@ -3590,11 +3507,11 @@ GByteArray *
mm_3gpp_parse_cind_read_response (const gchar *reply,
GError **error)
{
- GByteArray *array = NULL;
- GRegex *r = NULL;
- GMatchInfo *match_info;
- GError *inner_error = NULL;
- guint8 t;
+ g_autoptr(GRegex) r = NULL;
+ g_autoptr(GMatchInfo) match_info = NULL;
+ GByteArray *array = NULL;
+ GError *inner_error = NULL;
+ guint8 t;
g_return_val_if_fail (reply != NULL, NULL);
@@ -3614,7 +3531,7 @@ mm_3gpp_parse_cind_read_response (const gchar *reply,
g_set_error (error, MM_CORE_ERROR, MM_CORE_ERROR_FAILED,
"Could not parse the +CIND response '%s': didn't match",
reply);
- goto done;
+ return NULL;
}
array = g_byte_array_sized_new (g_match_info_get_match_count (match_info));
@@ -3625,10 +3542,9 @@ mm_3gpp_parse_cind_read_response (const gchar *reply,
t = 0;
g_byte_array_append (array, &t, 1);
- while (!inner_error &&
- g_match_info_matches (match_info)) {
- gchar *str;
- guint val = 0;
+ while (!inner_error && g_match_info_matches (match_info)) {
+ g_autofree gchar *str = NULL;
+ guint val = 0;
str = g_match_info_fetch (match_info, 1);
if (mm_get_uint_from_str (str, &val) && val < 255) {
@@ -3639,21 +3555,14 @@ mm_3gpp_parse_cind_read_response (const gchar *reply,
"Could not parse the +CIND response: invalid index '%s'",
str);
}
-
- g_free (str);
g_match_info_next (match_info, NULL);
}
if (inner_error) {
g_propagate_error (error, inner_error);
- g_byte_array_unref (array);
- array = NULL;
+ g_clear_pointer (&array, g_byte_array_unref);
}
-done:
- g_match_info_free (match_info);
- g_regex_unref (r);
-
return array;
}
@@ -3755,12 +3664,12 @@ mm_3gpp_parse_cgev_indication_pdp (const gchar *str,
guint *out_cid,
GError **error)
{
- GRegex *r;
- GMatchInfo *match_info = NULL;
- GError *inner_error = NULL;
- gchar *pdp_type = NULL;
- gchar *pdp_addr = NULL;
- guint cid = 0;
+ g_autoptr(GRegex) r = NULL;
+ g_autoptr(GMatchInfo) match_info = NULL;
+ GError *inner_error = NULL;
+ gchar *pdp_type = NULL;
+ gchar *pdp_addr = NULL;
+ guint cid = 0;
g_assert (type == MM_3GPP_CGEV_REJECT ||
type == MM_3GPP_CGEV_NW_REACT ||
@@ -3772,6 +3681,7 @@ mm_3gpp_parse_cgev_indication_pdp (const gchar *str,
"NW REACT|"
"NW DEACT|ME DEACT"
")\\s*([^,]*),\\s*([^,]*)(?:,\\s*([0-9]+))?", 0, 0, NULL);
+ g_assert (r);
str = mm_strip_tag (str, "+CGEV:");
g_regex_match_full (r, str, strlen (str), 0, 0, &match_info, &inner_error);
@@ -3802,10 +3712,6 @@ mm_3gpp_parse_cgev_indication_pdp (const gchar *str,
}
out:
- if (match_info)
- g_match_info_free (match_info);
- g_regex_unref (r);
-
if (inner_error) {
g_free (pdp_type);
g_free (pdp_addr);
@@ -3841,10 +3747,10 @@ mm_3gpp_parse_cgev_indication_primary (const gchar *str,
guint *out_cid,
GError **error)
{
- GRegex *r;
- GMatchInfo *match_info = NULL;
- GError *inner_error = NULL;
- guint cid = 0;
+ g_autoptr(GRegex) r = NULL;
+ g_autoptr(GMatchInfo) match_info = NULL;
+ GError *inner_error = NULL;
+ guint cid = 0;
g_assert ((type == MM_3GPP_CGEV_NW_ACT_PRIMARY) ||
(type == MM_3GPP_CGEV_ME_ACT_PRIMARY) ||
@@ -3872,10 +3778,6 @@ mm_3gpp_parse_cgev_indication_primary (const gchar *str,
}
out:
- if (match_info)
- g_match_info_free (match_info);
- g_regex_unref (r);
-
if (inner_error) {
g_propagate_error (error, inner_error);
return FALSE;
@@ -3900,12 +3802,12 @@ mm_3gpp_parse_cgev_indication_secondary (const gchar *str,
guint *out_event_type,
GError **error)
{
- GRegex *r;
- GMatchInfo *match_info = NULL;
- GError *inner_error = NULL;
- guint p_cid = 0;
- guint cid = 0;
- guint event_type = 0;
+ g_autoptr(GRegex) r = NULL;
+ g_autoptr(GMatchInfo) match_info = NULL;
+ GError *inner_error = NULL;
+ guint p_cid = 0;
+ guint cid = 0;
+ guint event_type = 0;
g_assert (type == MM_3GPP_CGEV_NW_ACT_SECONDARY ||
type == MM_3GPP_CGEV_ME_ACT_SECONDARY ||
@@ -3943,10 +3845,6 @@ mm_3gpp_parse_cgev_indication_secondary (const gchar *str,
}
out:
- if (match_info)
- g_match_info_free (match_info);
- g_regex_unref (r);
-
if (inner_error) {
g_propagate_error (error, inner_error);
return FALSE;
@@ -3980,10 +3878,10 @@ GList *
mm_3gpp_parse_pdu_cmgl_response (const gchar *str,
GError **error)
{
- GError *inner_error = NULL;
- GList *list = NULL;
- GMatchInfo *match_info;
- GRegex *r;
+ g_autoptr(GRegex) r = NULL;
+ g_autoptr(GMatchInfo) match_info = NULL;
+ GError *inner_error = NULL;
+ GList *list = NULL;
/*
* +CMGL: <index>, <status>, [<alpha>], <length>
@@ -4016,9 +3914,6 @@ mm_3gpp_parse_pdu_cmgl_response (const gchar *str,
}
}
- g_match_info_free (match_info);
- g_regex_unref (r);
-
if (inner_error) {
g_propagate_error (error, inner_error);
mm_3gpp_pdu_info_list_free (list);
@@ -4754,10 +4649,10 @@ mm_cdma_parse_crm_test_response (const gchar *reply,
MMModemCdmaRmProtocol *max,
GError **error)
{
- gboolean result = FALSE;
- GRegex *r;
- GMatchInfo *match_info = NULL;
- GError *match_error = NULL;
+ g_autoptr(GRegex) r = NULL;
+ g_autoptr(GMatchInfo) match_info = NULL;
+ gboolean result = FALSE;
+ GError *match_error = NULL;
/* Expected reply format is:
* ---> AT+CRM=?
@@ -4810,9 +4705,6 @@ mm_cdma_parse_crm_test_response (const gchar *reply,
reply);
}
- g_match_info_free (match_info);
- g_regex_unref (r);
-
return result;
}
@@ -5039,12 +4931,16 @@ mm_parse_cclk_response (const char *response,
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;
- 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;
+ gint tz = 0;
g_assert (iso8601p || tzp); /* at least one */
@@ -5065,7 +4961,7 @@ mm_parse_cclk_response (const char *response,
MM_CORE_ERROR_FAILED,
"Couldn't match +CCLK reply: %s", response);
}
- goto out;
+ return FALSE;
}
/* Remember that g_match_info_get_match_count() includes match #0 */
@@ -5082,7 +4978,7 @@ mm_parse_cclk_response (const char *response,
MM_CORE_ERROR,
MM_CORE_ERROR_FAILED,
"Failed to parse +CCLK reply: %s", response);
- goto out;
+ return FALSE;
}
/* Read optional time zone offset; if not given assume UTC (tz = 0).
@@ -5094,7 +4990,7 @@ mm_parse_cclk_response (const char *response,
MM_CORE_ERROR,
MM_CORE_ERROR_FAILED,
"Failed to parse timezone in +CCLK reply: %s", response);
- goto out;
+ return FALSE;
}
/* Adjust year to support YYYY format, as per +CSDF in 3GPP TS 27.007. Also,
@@ -5112,22 +5008,16 @@ mm_parse_cclk_response (const char *response,
mm_network_timezone_set_offset (*tzp, tz * 15);
}
- ret = TRUE;
-
if (iso8601p) {
/* Return ISO-8601 format date/time string */
*iso8601p = mm_new_iso8601_time (year, month, day, hour,
minute, second,
TRUE, (tz * 15),
error);
- ret = (*iso8601p != NULL);
+ return (*iso8601p != NULL);
}
- out:
- g_match_info_free (match_info);
- g_regex_unref (r);
-
- return ret;
+ return TRUE;
}
/*****************************************************************************/
@@ -5139,12 +5029,12 @@ gint
mm_parse_csim_response (const gchar *response,
GError **error)
{
- GMatchInfo *match_info = NULL;
- GRegex *r = NULL;
- gchar *str_code = NULL;
- gint retries = -1;
- guint hex_code;
- GError *inner_error = NULL;
+ g_autoptr(GRegex) r = NULL;
+ g_autoptr(GMatchInfo) match_info = NULL;
+ g_autofree gchar *str_code = NULL;
+ gint retries = -1;
+ guint hex_code;
+ GError *inner_error = NULL;
r = g_regex_new ("\\+CSIM:\\s*[0-9]+,\\s*\".*([0-9a-fA-F]{4})\"", G_REGEX_RAW, 0, NULL);
g_regex_match (r, response, 0, &match_info);
@@ -5202,10 +5092,6 @@ mm_parse_csim_response (const gchar *response,
retries = (gint)(hex_code - MM_MIN_SIM_RETRY_HEX);
out:
- g_regex_unref (r);
- g_match_info_free (match_info);
- g_free (str_code);
-
if (inner_error) {
g_propagate_error (error, inner_error);
return -1;