core: port GRegex/GMatchInfo to use autoptr()
The behavior of GRegex changed in 2.73.2 once it was ported from pcre1 to pcre2. In some cases it was made more strict, which is fine, in other cases it exposed some change in how it behaves on certain matches that is not extremely clear whether it's ok or not. See https://gitlab.gnome.org/GNOME/glib/-/issues/2729 See https://gitlab.freedesktop.org/mobile-broadband/ModemManager/-/issues/601 See https://gitlab.freedesktop.org/mobile-broadband/ModemManager/-/issues/621 Either way, one thing that was assumed was that initializing all GRegex/GMatchInfo variables to NULL and making sure they're NULL before they're initialized by glib (especially the GMatchInfo) was a good and safer approach. So, whenever possible, g_autoptr() is used to cleanup the allocated GMatchInfo/GRegex variables, and otherwise, g_clear_pointer() is used to ensure that no free/unref is attempted unless the given variable is not NULL, and also so that the variable is reseted to NULL after being disposed.
This commit is contained in:
@@ -54,9 +54,7 @@ static gboolean
|
||||
check_append_or_replace (MMLocationGpsNmea *self,
|
||||
const gchar *trace)
|
||||
{
|
||||
/* By default, replace */
|
||||
gboolean append_or_replace = FALSE;
|
||||
GMatchInfo *match_info = NULL;
|
||||
g_autoptr(GMatchInfo) match_info = NULL;
|
||||
|
||||
if (G_UNLIKELY (!self->priv->sequence_regex))
|
||||
self->priv->sequence_regex = g_regex_new ("\\$..(?:ALM|GSV|RTE|SFI),(\\d),(\\d).*",
|
||||
@@ -69,11 +67,11 @@ check_append_or_replace (MMLocationGpsNmea *self,
|
||||
|
||||
/* If we don't have the first element of a sequence, append */
|
||||
if (mm_get_uint_from_match_info (match_info, 2, &index) && index != 1)
|
||||
append_or_replace = TRUE;
|
||||
return TRUE;
|
||||
}
|
||||
g_match_info_free (match_info);
|
||||
|
||||
return append_or_replace;
|
||||
/* By default, replace */
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
static gboolean
|
||||
|
||||
@@ -190,7 +190,7 @@ gboolean
|
||||
mm_location_gps_raw_add_trace (MMLocationGpsRaw *self,
|
||||
const gchar *trace)
|
||||
{
|
||||
GMatchInfo *match_info = NULL;
|
||||
g_autoptr(GMatchInfo) match_info = NULL;
|
||||
|
||||
/* Current implementation works only with $GPGGA and $GNGGA traces */
|
||||
do {
|
||||
@@ -268,8 +268,6 @@ mm_location_gps_raw_add_trace (MMLocationGpsRaw *self,
|
||||
mm_get_double_from_match_info (match_info, 9, &self->priv->altitude);
|
||||
}
|
||||
|
||||
g_match_info_free (match_info);
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
|
||||
@@ -74,8 +74,8 @@ hstate_ready (MMIfaceModemCdma *self,
|
||||
DetailedRegistrationStateResults *results;
|
||||
GError *error = NULL;
|
||||
const gchar *response;
|
||||
GRegex *r;
|
||||
GMatchInfo *match_info;
|
||||
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);
|
||||
}
|
||||
@@ -144,8 +141,8 @@ state_ready (MMIfaceModemCdma *self,
|
||||
DetailedRegistrationStateResults *results;
|
||||
GError *error = NULL;
|
||||
const gchar *response;
|
||||
GRegex *r;
|
||||
GMatchInfo *match_info;
|
||||
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?",
|
||||
@@ -262,7 +256,12 @@ static void
|
||||
setup_ports (MMBroadbandModem *self)
|
||||
{
|
||||
MMPortSerialAt *ports[2];
|
||||
GRegex *regex;
|
||||
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 */
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -554,8 +554,8 @@ mm_cinterion_parse_cnmi_test (const gchar *response,
|
||||
GArray **supported_bfr,
|
||||
GError **error)
|
||||
{
|
||||
GRegex *r;
|
||||
GMatchInfo *match_info;
|
||||
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;
|
||||
@@ -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,8 +754,8 @@ mm_cinterion_parse_sind_response (const gchar *response,
|
||||
guint *value,
|
||||
GError **error)
|
||||
{
|
||||
GRegex *r;
|
||||
GMatchInfo *match_info;
|
||||
g_autoptr(GRegex) r = NULL;
|
||||
g_autoptr(GMatchInfo) match_info = NULL;
|
||||
guint errors = 0;
|
||||
|
||||
if (!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;
|
||||
g_autoptr(GRegex) r = NULL;
|
||||
g_autoptr(GMatchInfo) match_info = NULL;
|
||||
GList *list = NULL;
|
||||
GError *inner_error = NULL;
|
||||
GMatchInfo *match_info = 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);
|
||||
|
||||
@@ -1196,14 +1196,13 @@ common_test_slcc_urc (const gchar *urc,
|
||||
const MMCallInfo *expected_call_info_list,
|
||||
guint expected_call_info_list_size)
|
||||
{
|
||||
g_autoptr(GRegex) slcc_regex = NULL;
|
||||
g_autoptr(GMatchInfo) match_info = NULL;
|
||||
g_autofree gchar *str = NULL;
|
||||
GError *error = NULL;
|
||||
GRegex *slcc_regex = NULL;
|
||||
gboolean result;
|
||||
GMatchInfo *match_info = NULL;
|
||||
gchar *str;
|
||||
GList *call_info_list = NULL;
|
||||
GList *l;
|
||||
|
||||
gboolean result;
|
||||
|
||||
slcc_regex = mm_cinterion_get_slcc_regex ();
|
||||
|
||||
@@ -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,11 +1317,11 @@ common_test_ctzu_urc (const gchar *urc,
|
||||
gint expected_offset,
|
||||
gint expected_dst_offset)
|
||||
{
|
||||
g_autoptr(GRegex) ctzu_regex = NULL;
|
||||
g_autoptr(GMatchInfo) match_info = NULL;
|
||||
g_autofree gchar *iso8601 = NULL;
|
||||
GError *error = NULL;
|
||||
GRegex *ctzu_regex = NULL;
|
||||
gboolean result;
|
||||
GMatchInfo *match_info = NULL;
|
||||
gchar *iso8601;
|
||||
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
|
||||
|
||||
@@ -627,12 +627,13 @@ load_unlock_retries_finish (MMIfaceModem *self,
|
||||
GAsyncResult *res,
|
||||
GError **error)
|
||||
{
|
||||
g_autoptr(GRegex) r = NULL;
|
||||
g_autoptr(GMatchInfo) match_info = NULL;
|
||||
MMUnlockRetries *unlock_retries;
|
||||
const gchar *result;
|
||||
GRegex *r;
|
||||
GMatchInfo *match_info = NULL;
|
||||
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;
|
||||
}
|
||||
|
||||
|
||||
@@ -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,9 +206,9 @@ mm_huawei_parse_dhcp_response (const char *reply,
|
||||
guint *out_dns2,
|
||||
GError **error)
|
||||
{
|
||||
g_autoptr(GRegex) r = NULL;
|
||||
g_autoptr(GMatchInfo) match_info = NULL;
|
||||
gboolean matched;
|
||||
GRegex *r;
|
||||
GMatchInfo *match_info = NULL;
|
||||
GError *match_error = NULL;
|
||||
|
||||
g_assert (reply != 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,9 +272,9 @@ mm_huawei_parse_sysinfo_response (const char *reply,
|
||||
guint *out_sys_submode,
|
||||
GError **error)
|
||||
{
|
||||
g_autoptr(GRegex) r = NULL;
|
||||
g_autoptr(GMatchInfo) match_info = NULL;
|
||||
gboolean matched;
|
||||
GRegex *r;
|
||||
GMatchInfo *match_info = NULL;
|
||||
GError *match_error = NULL;
|
||||
|
||||
g_assert (out_srv_status != 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,9 +335,9 @@ mm_huawei_parse_sysinfoex_response (const char *reply,
|
||||
guint *out_sys_submode,
|
||||
GError **error)
|
||||
{
|
||||
g_autoptr(GRegex) r = NULL;
|
||||
g_autoptr(GMatchInfo) match_info = NULL;
|
||||
gboolean matched;
|
||||
GRegex *r;
|
||||
GMatchInfo *match_info = NULL;
|
||||
GError *match_error = NULL;
|
||||
|
||||
g_assert (out_srv_status != 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,
|
||||
gboolean
|
||||
mm_huawei_parse_nwtime_response (const gchar *response,
|
||||
gchar **iso8601p,
|
||||
MMNetworkTimezone **tzp,
|
||||
GError **error)
|
||||
{
|
||||
GRegex *r;
|
||||
GMatchInfo *match_info = NULL;
|
||||
g_autoptr(GRegex) r = NULL;
|
||||
g_autoptr(GMatchInfo) match_info = NULL;
|
||||
GError *match_error = NULL;
|
||||
guint year = 0, month = 0, day = 0, hour = 0, minute = 0, second = 0, dt = 0;
|
||||
guint year = 0;
|
||||
guint month = 0;
|
||||
guint day = 0;
|
||||
guint hour = 0;
|
||||
guint minute = 0;
|
||||
guint second = 0;
|
||||
guint dt = 0;
|
||||
gint tz = 0;
|
||||
gboolean ret = FALSE;
|
||||
|
||||
g_assert (iso8601p || tzp); /* at least one */
|
||||
|
||||
@@ -1211,12 +1209,12 @@ 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 {
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
/* Remember that g_match_info_get_match_count() includes match #0 */
|
||||
g_assert (g_match_info_get_match_count (match_info) >= 9);
|
||||
|
||||
@@ -1229,8 +1227,6 @@ gboolean mm_huawei_parse_nwtime_response (const gchar *response,
|
||||
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;
|
||||
@@ -1239,47 +1235,46 @@ gboolean mm_huawei_parse_nwtime_response (const gchar *response,
|
||||
* 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);
|
||||
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 (*iso8601p != NULL);
|
||||
}
|
||||
|
||||
} else {
|
||||
g_set_error_literal (error,
|
||||
MM_CORE_ERROR,
|
||||
MM_CORE_ERROR_FAILED,
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
g_set_error_literal (error, MM_CORE_ERROR, MM_CORE_ERROR_FAILED,
|
||||
"Failed to parse ^NWTIME reply");
|
||||
}
|
||||
}
|
||||
|
||||
g_match_info_free (match_info);
|
||||
g_regex_unref (r);
|
||||
|
||||
return ret;
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
/*****************************************************************************/
|
||||
/* ^TIME response parser */
|
||||
|
||||
gboolean mm_huawei_parse_time_response (const gchar *response,
|
||||
gboolean
|
||||
mm_huawei_parse_time_response (const gchar *response,
|
||||
gchar **iso8601p,
|
||||
MMNetworkTimezone **tzp,
|
||||
GError **error)
|
||||
{
|
||||
GRegex *r;
|
||||
GMatchInfo *match_info = NULL;
|
||||
g_autoptr(GRegex) r = NULL;
|
||||
g_autoptr(GMatchInfo) match_info = NULL;
|
||||
GError *match_error = NULL;
|
||||
guint year, month, day, hour, minute, second;
|
||||
gboolean ret = FALSE;
|
||||
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,7 +1301,9 @@ gboolean mm_huawei_parse_time_response (const gchar *response,
|
||||
MM_CORE_ERROR_FAILED,
|
||||
"Couldn't match ^TIME reply");
|
||||
}
|
||||
} else {
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
/* Remember that g_match_info_get_match_count() includes match #0 */
|
||||
g_assert (g_match_info_get_match_count (match_info) >= 7);
|
||||
|
||||
@@ -1316,8 +1313,6 @@ gboolean mm_huawei_parse_time_response (const gchar *response,
|
||||
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;
|
||||
@@ -1327,20 +1322,14 @@ gboolean mm_huawei_parse_time_response (const gchar *response,
|
||||
*iso8601p = mm_new_iso8601_time (year, month, day, hour,
|
||||
minute, second, FALSE, 0,
|
||||
error);
|
||||
ret = (*iso8601p != NULL);
|
||||
return (*iso8601p != NULL);
|
||||
}
|
||||
} else {
|
||||
g_set_error_literal (error,
|
||||
MM_CORE_ERROR,
|
||||
MM_CORE_ERROR_FAILED,
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
g_set_error_literal (error, MM_CORE_ERROR, MM_CORE_ERROR_FAILED,
|
||||
"Failed to parse ^TIME reply");
|
||||
}
|
||||
}
|
||||
|
||||
g_match_info_free (match_info);
|
||||
g_regex_unref (r);
|
||||
|
||||
return ret;
|
||||
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;
|
||||
g_autoptr(GRegex) r = NULL;
|
||||
g_autoptr(GMatchInfo) match_info = NULL;
|
||||
GError *match_error = NULL;
|
||||
gboolean ret = FALSE;
|
||||
char *s;
|
||||
|
||||
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;
|
||||
g_autoptr(GRegex) r = NULL;
|
||||
g_autoptr(GMatchInfo) match_info = NULL;
|
||||
GError *match_error = NULL;
|
||||
guint supported = 0, hz = 0, bits = 0;
|
||||
gboolean ret = FALSE;
|
||||
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,7 +1421,9 @@ mm_huawei_parse_cvoice_response (const gchar *response,
|
||||
MM_CORE_ERROR_FAILED,
|
||||
"Couldn't match ^CVOICE reply");
|
||||
}
|
||||
} else {
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
/* Remember that g_match_info_get_match_count() includes match #0 */
|
||||
g_assert (g_match_info_get_match_count (match_info) >= 5);
|
||||
|
||||
@@ -1454,25 +1435,17 @@ mm_huawei_parse_cvoice_response (const gchar *response,
|
||||
*out_hz = hz;
|
||||
if (out_bits)
|
||||
*out_bits = bits;
|
||||
ret = TRUE;
|
||||
} else {
|
||||
g_set_error_literal (error,
|
||||
MM_CORE_ERROR,
|
||||
MM_CORE_ERROR_UNSUPPORTED,
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
g_set_error_literal (error, MM_CORE_ERROR, MM_CORE_ERROR_UNSUPPORTED,
|
||||
"^CVOICE not supported by this device");
|
||||
return FALSE;
|
||||
}
|
||||
} 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,
|
||||
"Failed to parse ^CVOICE reply");
|
||||
}
|
||||
}
|
||||
|
||||
g_match_info_free (match_info);
|
||||
g_regex_unref (r);
|
||||
|
||||
return ret;
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
/*****************************************************************************/
|
||||
|
||||
@@ -126,8 +126,8 @@ load_supported_modes_finish (MMIfaceModem *self,
|
||||
GArray *combinations = NULL;
|
||||
const gchar *response;
|
||||
gchar **split = NULL;
|
||||
GMatchInfo *match_info;
|
||||
GRegex *r;
|
||||
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);
|
||||
@@ -145,17 +145,12 @@ 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,
|
||||
@@ -1122,10 +1117,11 @@ 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;
|
||||
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;
|
||||
}
|
||||
|
||||
@@ -56,9 +56,11 @@ mm_mbm_parse_e2ipcfg_response (const gchar *response,
|
||||
GError **error)
|
||||
{
|
||||
MMBearerIpConfig **ip_config = NULL;
|
||||
gboolean got_address = FALSE, got_gw = FALSE, got_dns = FALSE;
|
||||
GRegex *r;
|
||||
GMatchInfo *match_info = 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;
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
/*****************************************************************************/
|
||||
|
||||
@@ -67,12 +67,15 @@ load_unlock_retries_ready (MMBaseModem *self,
|
||||
GAsyncResult *res,
|
||||
GTask *task)
|
||||
{
|
||||
g_autoptr(GMatchInfo) match_info = NULL;
|
||||
g_autoptr(GRegex) r = NULL;
|
||||
const gchar *response;
|
||||
GError *error = NULL;
|
||||
GMatchInfo *match_info = NULL;
|
||||
GError *match_error = NULL;
|
||||
GRegex *r = NULL;
|
||||
gint pin1, puk1, pin2, puk2;
|
||||
gint pin1;
|
||||
gint puk1;
|
||||
gint pin2;
|
||||
gint puk2;
|
||||
MMUnlockRetries *retries;
|
||||
|
||||
response = mm_base_modem_at_command_finish (MM_BASE_MODEM (self), res, &error);
|
||||
@@ -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,
|
||||
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,12 +175,12 @@ get_supported_modes_ready (MMBaseModem *self,
|
||||
GTask *task)
|
||||
|
||||
{
|
||||
g_autoptr(GMatchInfo) match_info = NULL;
|
||||
g_autoptr(GRegex) r = NULL;
|
||||
const gchar *response;
|
||||
GError *error = NULL;
|
||||
GMatchInfo *match_info = NULL;
|
||||
MMModemModeCombination mode;
|
||||
GArray *combinations;
|
||||
GRegex *r;
|
||||
GError *match_error = NULL;
|
||||
gint device_type;
|
||||
|
||||
@@ -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)
|
||||
{
|
||||
g_autoptr(GMatchInfo) match_info = NULL;
|
||||
g_autoptr(GRegex) r = NULL;
|
||||
const gchar *response;
|
||||
GMatchInfo *match_info = NULL;
|
||||
GRegex *r;
|
||||
gint erat_mode = -1;
|
||||
gint erat_pref = -1;
|
||||
GError *match_error = NULL;
|
||||
gboolean result = FALSE;
|
||||
|
||||
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
|
||||
|
||||
@@ -161,8 +161,8 @@ nwrat_query_ready (MMBaseModem *self,
|
||||
LoadCurrentModesResult *result;
|
||||
GError *error = NULL;
|
||||
const gchar *response;
|
||||
GRegex *r;
|
||||
GMatchInfo *match_info = NULL;
|
||||
g_autoptr(GRegex) r = NULL;
|
||||
g_autoptr(GMatchInfo) match_info = NULL;
|
||||
gint a = -1;
|
||||
gint b = -1;
|
||||
|
||||
@@ -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,11 +1389,16 @@ parse_nwltime_reply (const char *response,
|
||||
MMNetworkTimezone **out_tz,
|
||||
GError **error)
|
||||
{
|
||||
GRegex *r;
|
||||
GMatchInfo *match_info = NULL;
|
||||
g_autoptr(GRegex) r = NULL;
|
||||
g_autoptr(GMatchInfo) match_info = NULL;
|
||||
GError *match_error = NULL;
|
||||
guint year, month, day, hour, minute, second;
|
||||
gchar *result = 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;
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
|
||||
@@ -364,10 +364,8 @@ parse_ossys_response (const gchar *response,
|
||||
{
|
||||
MMModemAccessTechnology current = MM_MODEM_ACCESS_TECHNOLOGY_UNKNOWN;
|
||||
const gchar *p;
|
||||
GRegex *r;
|
||||
GMatchInfo *match_info;
|
||||
gchar *str;
|
||||
gboolean success = FALSE;
|
||||
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;
|
||||
return TRUE;
|
||||
}
|
||||
g_free (str);
|
||||
}
|
||||
g_match_info_free (match_info);
|
||||
g_regex_unref (r);
|
||||
|
||||
return success;
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
static void
|
||||
@@ -447,10 +443,8 @@ parse_octi_response (const gchar *response,
|
||||
{
|
||||
MMModemAccessTechnology current = MM_MODEM_ACCESS_TECHNOLOGY_UNKNOWN;
|
||||
const gchar *p;
|
||||
GRegex *r;
|
||||
GMatchInfo *match_info;
|
||||
gchar *str;
|
||||
gboolean success = FALSE;
|
||||
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
|
||||
|
||||
@@ -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))
|
||||
|
||||
@@ -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;
|
||||
g_autofree LoadCurrentModesResult *result = NULL;
|
||||
const gchar *response;
|
||||
GError *error = NULL;
|
||||
GRegex *r = NULL;
|
||||
GMatchInfo *match_info = 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,10 +1624,15 @@ parse_time (const gchar *response,
|
||||
const gchar *tag,
|
||||
GError **error)
|
||||
{
|
||||
GRegex *r;
|
||||
GMatchInfo *match_info = NULL;
|
||||
g_autoptr(GRegex) r = NULL;
|
||||
g_autoptr(GMatchInfo) match_info = NULL;
|
||||
GError *match_error = NULL;
|
||||
guint year, month, day, hour, minute, second;
|
||||
guint year;
|
||||
guint month;
|
||||
guint day;
|
||||
guint hour;
|
||||
guint minute;
|
||||
guint second;
|
||||
gchar *result = NULL;
|
||||
|
||||
r = g_regex_new (regex, 0, 0, NULL);
|
||||
@@ -1665,8 +1664,6 @@ parse_time (const gchar *response,
|
||||
}
|
||||
}
|
||||
|
||||
g_match_info_free (match_info);
|
||||
g_regex_unref (r);
|
||||
return result;
|
||||
}
|
||||
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
/*****************************************************************************/
|
||||
|
||||
@@ -23,16 +23,15 @@ GList *
|
||||
mm_sierra_parse_scact_read_response (const gchar *reply,
|
||||
GError **error)
|
||||
{
|
||||
g_autoptr(GRegex) r = NULL;
|
||||
g_autoptr(GMatchInfo) match_info = NULL;
|
||||
GError *inner_error = NULL;
|
||||
GRegex *r;
|
||||
GMatchInfo *match_info;
|
||||
GList *list;
|
||||
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);
|
||||
}
|
||||
|
||||
@@ -33,13 +33,13 @@ common_test_clcc_urc (const gchar *urc,
|
||||
const MMCallInfo *expected_call_info_list,
|
||||
guint expected_call_info_list_size)
|
||||
{
|
||||
g_autoptr(GRegex) clcc_regex = NULL;
|
||||
g_autoptr(GMatchInfo) match_info = NULL;
|
||||
g_autofree gchar *str = NULL;
|
||||
GError *error = NULL;
|
||||
GRegex *clcc_regex = NULL;
|
||||
gboolean result;
|
||||
GMatchInfo *match_info = NULL;
|
||||
gchar *str;
|
||||
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)
|
||||
{
|
||||
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;
|
||||
GRegex *voice_call_regex = NULL;
|
||||
gboolean result;
|
||||
GMatchInfo *match_info = NULL;
|
||||
|
||||
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)
|
||||
{
|
||||
g_autoptr(GRegex) missed_call_regex = NULL;
|
||||
g_autoptr(GMatchInfo) match_info = NULL;
|
||||
g_autofree gchar *details = NULL;
|
||||
GError *error = NULL;
|
||||
gchar *details = NULL;
|
||||
GRegex *missed_call_regex = NULL;
|
||||
gboolean result;
|
||||
GMatchInfo *match_info = NULL;
|
||||
|
||||
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,10 +222,10 @@ static void
|
||||
common_test_cring_urc (const gchar *urc,
|
||||
const gchar *expected_type)
|
||||
{
|
||||
g_autoptr(GRegex) cring_regex = NULL;
|
||||
g_autoptr(GMatchInfo) match_info = NULL;
|
||||
g_autofree gchar *type = NULL;
|
||||
GError *error = NULL;
|
||||
GRegex *cring_regex = NULL;
|
||||
GMatchInfo *match_info = NULL;
|
||||
gchar *type;
|
||||
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,10 +259,10 @@ static void
|
||||
common_test_rxdtmf_urc (const gchar *urc,
|
||||
const gchar *expected_str)
|
||||
{
|
||||
g_autoptr(GRegex) rxdtmf_regex = NULL;
|
||||
g_autoptr(GMatchInfo) match_info = NULL;
|
||||
g_autofree gchar *type = NULL;
|
||||
GError *error = NULL;
|
||||
GRegex *rxdtmf_regex = NULL;
|
||||
GMatchInfo *match_info = NULL;
|
||||
gchar *type;
|
||||
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
|
||||
|
||||
@@ -504,7 +504,7 @@ telit_qss_enable_ready (MMBaseModem *self,
|
||||
QssSetupContext *ctx;
|
||||
MMPortSerialAt *port;
|
||||
GError **error;
|
||||
GRegex *pattern;
|
||||
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++;
|
||||
|
||||
@@ -112,9 +112,9 @@ cache_port_mode (MMPortProbe *probe,
|
||||
MMDevice *device,
|
||||
const gchar *reply)
|
||||
{
|
||||
GRegex *r = NULL;
|
||||
g_autoptr(GRegex) r = NULL;
|
||||
g_autoptr(GMatchInfo) match_info = NULL;
|
||||
GRegexCompileFlags flags = G_REGEX_DOLLAR_ENDONLY | G_REGEX_RAW;
|
||||
GMatchInfo *match_info = NULL;
|
||||
GError *error = NULL;
|
||||
gboolean ret = FALSE;
|
||||
guint portcfg_current;
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
@@ -701,10 +701,10 @@ common_parse_bnd_response (const gchar *response,
|
||||
gpointer log_object,
|
||||
GError **error)
|
||||
{
|
||||
g_autoptr(GMatchInfo) match_info = NULL;
|
||||
g_autoptr(GRegex) r = NULL;
|
||||
GError *inner_error = NULL;
|
||||
GArray *bands = NULL;
|
||||
GMatchInfo *match_info = NULL;
|
||||
GRegex *r = NULL;
|
||||
const gchar *load_bands_regex = NULL;
|
||||
|
||||
static const gchar *load_bands_regex_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);
|
||||
|
||||
@@ -1122,8 +1122,8 @@ static void
|
||||
ublox_setup_ciev_handler (MMIfaceModem *self,
|
||||
guint simind_idx)
|
||||
{
|
||||
GRegex *pattern;
|
||||
gchar *ciev_regex;
|
||||
g_autoptr(GRegex) pattern = NULL;
|
||||
g_autofree gchar *ciev_regex = NULL;
|
||||
MMPortSerialAt *primary_port;
|
||||
MMPortSerialAt *secondary_port;
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -31,8 +31,8 @@ mm_ublox_parse_upincnt_response (const gchar *response,
|
||||
guint *out_puk2_attempts,
|
||||
GError **error)
|
||||
{
|
||||
GRegex *r;
|
||||
GMatchInfo *match_info;
|
||||
g_autoptr(GRegex) r = NULL;
|
||||
g_autoptr(GMatchInfo) match_info = NULL;
|
||||
GError *inner_error = NULL;
|
||||
guint pin_attempts = 0;
|
||||
guint pin2_attempts = 0;
|
||||
@@ -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,8 +104,8 @@ mm_ublox_parse_uusbconf_response (const gchar *response,
|
||||
MMUbloxUsbProfile *out_profile,
|
||||
GError **error)
|
||||
{
|
||||
GRegex *r;
|
||||
GMatchInfo *match_info;
|
||||
g_autoptr(GRegex) r = NULL;
|
||||
g_autoptr(GMatchInfo) match_info = NULL;
|
||||
GError *inner_error = NULL;
|
||||
MMUbloxUsbProfile profile = MM_UBLOX_USB_PROFILE_UNKNOWN;
|
||||
|
||||
@@ -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,8 +162,8 @@ mm_ublox_parse_ubmconf_response (const gchar *response,
|
||||
MMUbloxNetworkingMode *out_mode,
|
||||
GError **error)
|
||||
{
|
||||
GRegex *r;
|
||||
GMatchInfo *match_info;
|
||||
g_autoptr(GRegex) r = NULL;
|
||||
g_autoptr(GMatchInfo) match_info = NULL;
|
||||
GError *inner_error = NULL;
|
||||
MMUbloxNetworkingMode mode = MM_UBLOX_NETWORKING_MODE_UNKNOWN;
|
||||
|
||||
@@ -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,8 +224,8 @@ mm_ublox_parse_uipaddr_response (const gchar *response,
|
||||
gchar **out_ipv6_link_local_address,
|
||||
GError **error)
|
||||
{
|
||||
GRegex *r;
|
||||
GMatchInfo *match_info;
|
||||
g_autoptr(GRegex) r = NULL;
|
||||
g_autoptr(GMatchInfo) match_info = NULL;
|
||||
GError *inner_error = NULL;
|
||||
guint cid = 0;
|
||||
gchar *if_name = NULL;
|
||||
@@ -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,8 +1536,8 @@ GArray *
|
||||
mm_ublox_parse_uact_response (const gchar *response,
|
||||
GError **error)
|
||||
{
|
||||
GRegex *r;
|
||||
GMatchInfo *match_info;
|
||||
g_autoptr(GRegex) r = NULL;
|
||||
g_autoptr(GMatchInfo) match_info = NULL;
|
||||
GError *inner_error = NULL;
|
||||
GArray *nums = NULL;
|
||||
GArray *bands = NULL;
|
||||
@@ -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,8 +1614,9 @@ mm_ublox_parse_uact_test (const gchar *response,
|
||||
GArray **bands4g_out,
|
||||
GError **error)
|
||||
{
|
||||
GRegex *r;
|
||||
GMatchInfo *match_info;
|
||||
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;
|
||||
@@ -1641,7 +1624,6 @@ mm_ublox_parse_uact_test (const gchar *response,
|
||||
GArray *bands2g = NULL;
|
||||
GArray *bands3g = NULL;
|
||||
GArray *bands4g = NULL;
|
||||
gchar **split = NULL;
|
||||
|
||||
g_assert (bands2g_out && bands3g_out && bands4g_out);
|
||||
|
||||
@@ -1658,7 +1640,7 @@ mm_ublox_parse_uact_test (const gchar *response,
|
||||
goto out;
|
||||
|
||||
if (g_match_info_matches (match_info)) {
|
||||
gchar *aux;
|
||||
g_autofree gchar *aux = NULL;
|
||||
guint n_groups;
|
||||
|
||||
aux = mm_get_string_unquoted_from_match_info (match_info, 4);
|
||||
@@ -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;
|
||||
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;
|
||||
gchar *allowed_str = NULL;
|
||||
gchar *preferred_str = NULL;
|
||||
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,8 +1951,8 @@ mm_ublox_parse_ugcntrd_response_for_cid (const gchar *response,
|
||||
guint64 *out_total_rx_bytes,
|
||||
GError **error)
|
||||
{
|
||||
GRegex *r;
|
||||
GMatchInfo *match_info = NULL;
|
||||
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;
|
||||
@@ -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;
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
@@ -172,10 +171,10 @@ sysinfo_ready (MMBaseModem *self,
|
||||
|
||||
{
|
||||
DetailedRegistrationStateResults *ctx;
|
||||
DetailedRegistrationStateResults *results;
|
||||
g_autofree DetailedRegistrationStateResults *results = NULL;
|
||||
const gchar *response;
|
||||
GRegex *r;
|
||||
GMatchInfo *match_info;
|
||||
g_autoptr(GRegex) r = NULL;
|
||||
g_autoptr(GMatchInfo) match_info = NULL;
|
||||
MMModemCdmaRegistrationState reg_state;
|
||||
guint val = 0;
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
|
||||
@@ -1225,7 +1225,7 @@ setup_ports (MMBroadbandModem *self)
|
||||
{
|
||||
gpointer parser;
|
||||
MMPortSerialAt *primary;
|
||||
GRegex *regex;
|
||||
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,
|
||||
|
||||
@@ -120,8 +120,8 @@ load_current_modes_finish (MMIfaceModem *self,
|
||||
MMModemMode *preferred,
|
||||
GError **error)
|
||||
{
|
||||
GRegex *r;
|
||||
GMatchInfo *match_info;
|
||||
g_autoptr(GRegex) r = NULL;
|
||||
g_autoptr(GMatchInfo) match_info = NULL;
|
||||
const gchar *response;
|
||||
gchar *str;
|
||||
gint mode = -1;
|
||||
@@ -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:
|
||||
|
||||
@@ -364,8 +364,8 @@ mm_xmm_parse_xact_query_response (const gchar *response,
|
||||
GArray **bands_out,
|
||||
GError **error)
|
||||
{
|
||||
GRegex *r;
|
||||
GMatchInfo *match_info;
|
||||
g_autoptr(GRegex) r = NULL;
|
||||
g_autoptr(GMatchInfo) match_info = NULL;
|
||||
GError *inner_error = NULL;
|
||||
GArray *bands = NULL;
|
||||
guint i;
|
||||
@@ -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,8 +606,8 @@ mm_xmm_parse_xcesq_query_response (const gchar *response,
|
||||
gint *out_rssnr,
|
||||
GError **error)
|
||||
{
|
||||
GRegex *r;
|
||||
GMatchInfo *match_info;
|
||||
g_autoptr(GRegex) r = NULL;
|
||||
g_autoptr(GMatchInfo) match_info = NULL;
|
||||
GError *inner_error = NULL;
|
||||
guint rxlev = 99;
|
||||
guint ber = 99;
|
||||
@@ -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,8 +953,8 @@ mm_xmm_parse_xlcsslp_query_response (const gchar *response,
|
||||
gchar **supl_address,
|
||||
GError **error)
|
||||
{
|
||||
GRegex *r;
|
||||
GMatchInfo *match_info;
|
||||
g_autoptr(GRegex) r = NULL;
|
||||
g_autoptr(GMatchInfo) match_info = NULL;
|
||||
GError *inner_error = NULL;
|
||||
gchar *address = NULL;
|
||||
guint port = 0;
|
||||
@@ -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;
|
||||
|
||||
@@ -340,21 +340,19 @@ load_current_modes_finish (MMIfaceModem *self,
|
||||
GError **error)
|
||||
{
|
||||
const gchar *response;
|
||||
GMatchInfo *match_info = NULL;
|
||||
GRegex *r;
|
||||
g_autoptr(GMatchInfo) match_info = NULL;
|
||||
g_autoptr(GRegex) r = NULL;
|
||||
gint cm_mode = -1;
|
||||
gint pref_acq = -1;
|
||||
gboolean result;
|
||||
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
|
||||
|
||||
+31
-94
@@ -3170,7 +3170,7 @@ set_cgev_unsolicited_events_handlers (MMBroadbandModem *self,
|
||||
gboolean enable)
|
||||
{
|
||||
MMPortSerialAt *ports[2];
|
||||
GRegex *cgev_regex;
|
||||
g_autoptr(GRegex) cgev_regex = NULL;
|
||||
guint i;
|
||||
|
||||
cgev_regex = mm_3gpp_cgev_regex_get ();
|
||||
@@ -3193,8 +3193,6 @@ set_cgev_unsolicited_events_handlers (MMBroadbandModem *self,
|
||||
enable ? self : NULL,
|
||||
NULL);
|
||||
}
|
||||
|
||||
g_regex_unref (cgev_regex);
|
||||
}
|
||||
|
||||
static void
|
||||
@@ -3246,7 +3244,7 @@ set_ciev_unsolicited_events_handlers (MMBroadbandModem *self,
|
||||
gboolean enable)
|
||||
{
|
||||
MMPortSerialAt *ports[2];
|
||||
GRegex *ciev_regex;
|
||||
g_autoptr(GRegex) ciev_regex = NULL;
|
||||
guint i;
|
||||
|
||||
ciev_regex = mm_3gpp_ciev_regex_get ();
|
||||
@@ -3269,8 +3267,6 @@ set_ciev_unsolicited_events_handlers (MMBroadbandModem *self,
|
||||
enable ? self : NULL,
|
||||
NULL);
|
||||
}
|
||||
|
||||
g_regex_unref (ciev_regex);
|
||||
}
|
||||
|
||||
static void
|
||||
@@ -5160,10 +5156,10 @@ registration_status_check_ready (MMBroadbandModem *self,
|
||||
GAsyncResult *res,
|
||||
GTask *task)
|
||||
{
|
||||
g_autoptr(GMatchInfo) match_info = NULL;
|
||||
RunRegistrationChecksContext *ctx;
|
||||
const gchar *response;
|
||||
GError *error = NULL;
|
||||
GMatchInfo *match_info = NULL;
|
||||
guint i;
|
||||
gboolean parsed;
|
||||
gboolean cgreg = FALSE;
|
||||
@@ -5205,8 +5201,7 @@ registration_status_check_ready (MMBroadbandModem *self,
|
||||
0,
|
||||
&match_info))
|
||||
break;
|
||||
g_match_info_free (match_info);
|
||||
match_info = NULL;
|
||||
g_clear_pointer (&match_info, g_match_info_free);
|
||||
}
|
||||
|
||||
if (!match_info) {
|
||||
@@ -5229,7 +5224,6 @@ registration_status_check_ready (MMBroadbandModem *self,
|
||||
&cereg,
|
||||
&c5greg,
|
||||
&error);
|
||||
g_match_info_free (match_info);
|
||||
|
||||
if (!parsed) {
|
||||
if (!error)
|
||||
@@ -6307,7 +6301,7 @@ set_unsolicited_result_code_handlers (MMIfaceModem3gppUssd *self,
|
||||
gpointer user_data)
|
||||
{
|
||||
MMPortSerialAt *ports[2];
|
||||
GRegex *cusd_regex;
|
||||
g_autoptr(GRegex) cusd_regex = NULL;
|
||||
guint i;
|
||||
GTask *task;
|
||||
|
||||
@@ -6331,8 +6325,6 @@ set_unsolicited_result_code_handlers (MMIfaceModem3gppUssd *self,
|
||||
NULL);
|
||||
}
|
||||
|
||||
g_regex_unref (cusd_regex);
|
||||
|
||||
task = g_task_new (self, NULL, callback, user_data);
|
||||
g_task_return_boolean (task, TRUE);
|
||||
g_object_unref (task);
|
||||
@@ -7234,8 +7226,8 @@ set_messaging_unsolicited_events_handlers (MMIfaceModemMessaging *self,
|
||||
gpointer user_data)
|
||||
{
|
||||
MMPortSerialAt *ports[2];
|
||||
GRegex *cmti_regex;
|
||||
GRegex *cds_regex;
|
||||
g_autoptr(GRegex) cmti_regex = NULL;
|
||||
g_autoptr(GRegex) cds_regex = NULL;
|
||||
guint i;
|
||||
GTask *task;
|
||||
|
||||
@@ -7267,9 +7259,6 @@ set_messaging_unsolicited_events_handlers (MMIfaceModemMessaging *self,
|
||||
NULL);
|
||||
}
|
||||
|
||||
g_regex_unref (cmti_regex);
|
||||
g_regex_unref (cds_regex);
|
||||
|
||||
task = g_task_new (self, NULL, callback, user_data);
|
||||
g_task_return_boolean (task, TRUE);
|
||||
g_object_unref (task);
|
||||
@@ -7487,8 +7476,8 @@ sms_text_part_list_ready (MMBroadbandModem *self,
|
||||
GTask *task)
|
||||
{
|
||||
ListPartsContext *ctx;
|
||||
GRegex *r;
|
||||
GMatchInfo *match_info = NULL;
|
||||
g_autoptr(GRegex) r = NULL;
|
||||
g_autoptr(GMatchInfo) match_info = NULL;
|
||||
const gchar *response;
|
||||
GError *error = NULL;
|
||||
|
||||
@@ -7510,8 +7499,6 @@ sms_text_part_list_ready (MMBroadbandModem *self,
|
||||
MM_CORE_ERROR_INVALID_ARGS,
|
||||
"Couldn't parse SMS list response");
|
||||
g_object_unref (task);
|
||||
g_match_info_free (match_info);
|
||||
g_regex_unref (r);
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -7597,8 +7584,6 @@ sms_text_part_list_ready (MMBroadbandModem *self,
|
||||
next:
|
||||
g_match_info_next (match_info, NULL);
|
||||
}
|
||||
g_match_info_free (match_info);
|
||||
g_regex_unref (r);
|
||||
|
||||
/* We consider all done */
|
||||
g_task_return_boolean (task, TRUE);
|
||||
@@ -7930,7 +7915,7 @@ set_voice_in_call_unsolicited_events_handlers (MMBroadbandModem *self,
|
||||
gboolean enable)
|
||||
{
|
||||
MMPortSerialAt *ports[2];
|
||||
GRegex *in_call_event_regex;
|
||||
g_autoptr(GRegex) in_call_event_regex = NULL;
|
||||
guint i;
|
||||
|
||||
in_call_event_regex = g_regex_new ("\\r\\n(NO CARRIER|BUSY|NO ANSWER|NO DIALTONE)(\\r)?\\r\\n$",
|
||||
@@ -7954,8 +7939,6 @@ set_voice_in_call_unsolicited_events_handlers (MMBroadbandModem *self,
|
||||
enable ? self : NULL,
|
||||
NULL);
|
||||
}
|
||||
|
||||
g_regex_unref (in_call_event_regex);
|
||||
}
|
||||
|
||||
static void
|
||||
@@ -8147,10 +8130,10 @@ set_voice_unsolicited_events_handlers (MMIfaceModemVoice *self,
|
||||
gpointer user_data)
|
||||
{
|
||||
MMPortSerialAt *ports[2];
|
||||
GRegex *cring_regex;
|
||||
GRegex *ring_regex;
|
||||
GRegex *clip_regex;
|
||||
GRegex *ccwa_regex;
|
||||
g_autoptr(GRegex) cring_regex = NULL;
|
||||
g_autoptr(GRegex) ring_regex = NULL;
|
||||
g_autoptr(GRegex) clip_regex = NULL;
|
||||
g_autoptr(GRegex) ccwa_regex = NULL;
|
||||
guint i;
|
||||
GTask *task;
|
||||
|
||||
@@ -8196,11 +8179,6 @@ set_voice_unsolicited_events_handlers (MMIfaceModemVoice *self,
|
||||
NULL);
|
||||
}
|
||||
|
||||
g_regex_unref (ccwa_regex);
|
||||
g_regex_unref (clip_regex);
|
||||
g_regex_unref (cring_regex);
|
||||
g_regex_unref (ring_regex);
|
||||
|
||||
task = g_task_new (self, NULL, callback, user_data);
|
||||
g_task_return_boolean (task, TRUE);
|
||||
g_object_unref (task);
|
||||
@@ -9264,8 +9242,8 @@ css_query_ready (MMIfaceModemCdma *self,
|
||||
band = 'Z';
|
||||
success = TRUE;
|
||||
} else {
|
||||
GRegex *r;
|
||||
GMatchInfo *match_info;
|
||||
g_autoptr(GRegex) r = NULL;
|
||||
g_autoptr(GMatchInfo) match_info = NULL;
|
||||
|
||||
/* Format is "<band_class>,<band>,<sid>" */
|
||||
r = g_regex_new ("\\s*([^,]*?)\\s*,\\s*([^,]*?)\\s*,\\s*(\\d+)", G_REGEX_RAW | G_REGEX_OPTIMIZE, 0, NULL);
|
||||
@@ -9296,9 +9274,6 @@ css_query_ready (MMIfaceModemCdma *self,
|
||||
|
||||
success = TRUE;
|
||||
}
|
||||
|
||||
g_match_info_free (match_info);
|
||||
g_regex_unref (r);
|
||||
}
|
||||
|
||||
if (!success) {
|
||||
@@ -10915,9 +10890,12 @@ static void
|
||||
setup_ports (MMBroadbandModem *self)
|
||||
{
|
||||
MMPortSerialAt *ports[2];
|
||||
GRegex *regex;
|
||||
g_autoptr(GRegex) ciev_regex = NULL;
|
||||
g_autoptr(GRegex) cmti_regex = NULL;
|
||||
g_autoptr(GRegex) cusd_regex = NULL;
|
||||
GPtrArray *array;
|
||||
guint i, j;
|
||||
guint i;
|
||||
guint j;
|
||||
|
||||
ports[0] = mm_base_modem_peek_port_primary (MM_BASE_MODEM (self));
|
||||
ports[1] = mm_base_modem_peek_port_secondary (MM_BASE_MODEM (self));
|
||||
@@ -10933,64 +10911,23 @@ setup_ports (MMBroadbandModem *self)
|
||||
NULL);
|
||||
|
||||
/* Cleanup all unsolicited message handlers in all AT ports */
|
||||
|
||||
/* Set up CREG unsolicited message handlers, with NULL callbacks */
|
||||
array = mm_3gpp_creg_regex_get (FALSE);
|
||||
ciev_regex = mm_3gpp_ciev_regex_get ();
|
||||
cmti_regex = mm_3gpp_cmti_regex_get ();
|
||||
cusd_regex = mm_3gpp_cusd_regex_get ();
|
||||
|
||||
for (i = 0; i < 2; i++) {
|
||||
if (!ports[i])
|
||||
continue;
|
||||
|
||||
for (j = 0; j < array->len; j++) {
|
||||
mm_port_serial_at_add_unsolicited_msg_handler (MM_PORT_SERIAL_AT (ports[i]),
|
||||
(GRegex *)g_ptr_array_index (array, j),
|
||||
NULL,
|
||||
NULL,
|
||||
NULL);
|
||||
}
|
||||
for (j = 0; j < array->len; j++)
|
||||
mm_port_serial_at_add_unsolicited_msg_handler (MM_PORT_SERIAL_AT (ports[i]), (GRegex *)g_ptr_array_index (array, j), NULL, NULL, NULL);
|
||||
mm_port_serial_at_add_unsolicited_msg_handler (MM_PORT_SERIAL_AT (ports[i]), ciev_regex, NULL, NULL, NULL);
|
||||
mm_port_serial_at_add_unsolicited_msg_handler (MM_PORT_SERIAL_AT (ports[i]), cmti_regex, NULL, NULL, NULL);
|
||||
mm_port_serial_at_add_unsolicited_msg_handler (MM_PORT_SERIAL_AT (ports[i]), cusd_regex, NULL, NULL, NULL);
|
||||
}
|
||||
|
||||
mm_3gpp_creg_regex_destroy (array);
|
||||
|
||||
/* Set up CIEV unsolicited message handler, with NULL callback */
|
||||
regex = mm_3gpp_ciev_regex_get ();
|
||||
for (i = 0; i < 2; i++) {
|
||||
if (!ports[i])
|
||||
continue;
|
||||
|
||||
mm_port_serial_at_add_unsolicited_msg_handler (MM_PORT_SERIAL_AT (ports[i]),
|
||||
regex,
|
||||
NULL,
|
||||
NULL,
|
||||
NULL);
|
||||
}
|
||||
g_regex_unref (regex);
|
||||
|
||||
/* Set up CMTI unsolicited message handler, with NULL callback */
|
||||
regex = mm_3gpp_cmti_regex_get ();
|
||||
for (i = 0; i < 2; i++) {
|
||||
if (!ports[i])
|
||||
continue;
|
||||
|
||||
mm_port_serial_at_add_unsolicited_msg_handler (MM_PORT_SERIAL_AT (ports[i]),
|
||||
regex,
|
||||
NULL,
|
||||
NULL,
|
||||
NULL);
|
||||
}
|
||||
g_regex_unref (regex);
|
||||
|
||||
/* Set up CUSD unsolicited message handler, with NULL callback */
|
||||
regex = mm_3gpp_cusd_regex_get ();
|
||||
for (i = 0; i < 2; i++) {
|
||||
if (!ports[i])
|
||||
continue;
|
||||
|
||||
mm_port_serial_at_add_unsolicited_msg_handler (MM_PORT_SERIAL_AT (ports[i]),
|
||||
regex,
|
||||
NULL,
|
||||
NULL,
|
||||
NULL);
|
||||
}
|
||||
g_regex_unref (regex);
|
||||
}
|
||||
|
||||
/*****************************************************************************/
|
||||
|
||||
+105
-219
@@ -528,10 +528,10 @@ mm_3gpp_parse_clcc_response (const gchar *str,
|
||||
GList **out_list,
|
||||
GError **error)
|
||||
{
|
||||
GRegex *r;
|
||||
g_autoptr(GRegex) r = NULL;
|
||||
g_autoptr(GMatchInfo) match_info = NULL;
|
||||
GList *list = NULL;
|
||||
GError *inner_error = NULL;
|
||||
GMatchInfo *match_info = 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,9 +733,9 @@ mm_parse_ifc_test_response (const gchar *response,
|
||||
gpointer log_object,
|
||||
GError **error)
|
||||
{
|
||||
GRegex *r;
|
||||
g_autoptr(GRegex) r = NULL;
|
||||
g_autoptr(GMatchInfo) match_info = NULL;
|
||||
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;
|
||||
@@ -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,11 +975,11 @@ mm_3gpp_parse_ws46_test_response (const gchar *response,
|
||||
gpointer log_object,
|
||||
GError **error)
|
||||
{
|
||||
g_autoptr(GRegex) r = NULL;
|
||||
g_autoptr(GMatchInfo) match_info = NULL;
|
||||
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;
|
||||
@@ -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,9 +1180,9 @@ mm_3gpp_parse_cops_test_response (const gchar *reply,
|
||||
gpointer log_object,
|
||||
GError **error)
|
||||
{
|
||||
GRegex *r;
|
||||
g_autoptr(GRegex) r = NULL;
|
||||
g_autoptr(GMatchInfo) match_info = NULL;
|
||||
GList *info_list = NULL;
|
||||
GMatchInfo *match_info;
|
||||
gboolean umts_format = TRUE;
|
||||
|
||||
g_return_val_if_fail (reply != NULL, NULL);
|
||||
@@ -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,8 +1323,8 @@ mm_3gpp_parse_cops_read_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;
|
||||
guint mode = 0;
|
||||
guint format = 0;
|
||||
@@ -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,8 +1708,8 @@ mm_3gpp_parse_cgdcont_test_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;
|
||||
GList *list = NULL;
|
||||
|
||||
@@ -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);
|
||||
@@ -1814,23 +1794,21 @@ mm_3gpp_parse_cgdcont_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;
|
||||
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);
|
||||
0, NULL);
|
||||
g_assert (r);
|
||||
|
||||
while (!inner_error &&
|
||||
g_match_info_matches (match_info)) {
|
||||
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;
|
||||
|
||||
@@ -1857,10 +1835,6 @@ mm_3gpp_parse_cgdcont_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_list_free (list);
|
||||
g_propagate_error (error, 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)
|
||||
{
|
||||
g_autoptr(GRegex) r = NULL;
|
||||
g_autoptr(GMatchInfo) match_info = NULL;
|
||||
GError *inner_error = NULL;
|
||||
GRegex *r;
|
||||
GMatchInfo *match_info;
|
||||
GList *list;
|
||||
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;
|
||||
g_autoptr(GRegex) r = NULL;
|
||||
g_autoptr(GMatchInfo) match_info = NULL;
|
||||
gchar *s;
|
||||
guint32 min = -1, max = -1;
|
||||
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,8 +2161,8 @@ mm_3gpp_parse_cmgr_read_response (const gchar *reply,
|
||||
guint index,
|
||||
GError **error)
|
||||
{
|
||||
GRegex *r;
|
||||
GMatchInfo *match_info;
|
||||
g_autoptr(GRegex) r = NULL;
|
||||
g_autoptr(GMatchInfo) match_info = NULL;
|
||||
gint count;
|
||||
gint status;
|
||||
gchar *pdu;
|
||||
@@ -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,8 +2330,8 @@ mm_3gpp_parse_cgcontrdp_response (const gchar *response,
|
||||
gchar **out_dns_secondary_address,
|
||||
GError **error)
|
||||
{
|
||||
GRegex *r;
|
||||
GMatchInfo *match_info;
|
||||
g_autoptr(GRegex) r = NULL;
|
||||
g_autoptr(GMatchInfo) match_info = NULL;
|
||||
GError *inner_error = NULL;
|
||||
guint cid = 0;
|
||||
guint bearer_id = 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,8 +2468,8 @@ mm_3gpp_parse_cfun_query_response (const gchar *response,
|
||||
guint *out_state,
|
||||
GError **error)
|
||||
{
|
||||
GRegex *r;
|
||||
GMatchInfo *match_info;
|
||||
g_autoptr(GRegex) r = NULL;
|
||||
g_autoptr(GMatchInfo) match_info = NULL;
|
||||
GError *inner_error = NULL;
|
||||
guint state = G_MAXUINT;
|
||||
|
||||
@@ -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,8 +2522,8 @@ mm_3gpp_parse_cesq_response (const gchar *response,
|
||||
guint *out_rsrp,
|
||||
GError **error)
|
||||
{
|
||||
GRegex *r;
|
||||
GMatchInfo *match_info;
|
||||
g_autoptr(GRegex) r = NULL;
|
||||
g_autoptr(GMatchInfo) match_info = NULL;
|
||||
GError *inner_error = NULL;
|
||||
guint rxlev = 99;
|
||||
guint ber = 99;
|
||||
@@ -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,9 +2832,9 @@ mm_3gpp_parse_ccwa_service_query_response (const gchar *response,
|
||||
gboolean *status,
|
||||
GError **error)
|
||||
{
|
||||
GRegex *r;
|
||||
g_autoptr(GRegex) r = NULL;
|
||||
g_autoptr(GMatchInfo) match_info = NULL;
|
||||
GError *inner_error = NULL;
|
||||
GMatchInfo *match_info = NULL;
|
||||
gint class_1_status = -1;
|
||||
|
||||
/*
|
||||
@@ -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,7 +2981,7 @@ mm_3gpp_parse_cpms_test_response (const gchar *reply,
|
||||
g_assert (r);
|
||||
|
||||
for (i = 0; i < N_EXPECTED_GROUPS; i++) {
|
||||
GMatchInfo *match_info = NULL;
|
||||
g_autoptr(GMatchInfo) match_info = NULL;
|
||||
GArray *array;
|
||||
|
||||
/* We always return a valid array, even if it may be empty */
|
||||
@@ -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;
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
if (!mm_3gpp_get_cpms_storage_match (match_info, "memr", memr, error)) {
|
||||
goto end;
|
||||
}
|
||||
if (!mm_3gpp_get_cpms_storage_match (match_info, "memr", memr, error))
|
||||
return FALSE;
|
||||
|
||||
if (!mm_3gpp_get_cpms_storage_match (match_info, "memw", memw, error)) {
|
||||
goto end;
|
||||
}
|
||||
if (!mm_3gpp_get_cpms_storage_match (match_info, "memw", memw, error))
|
||||
return FALSE;
|
||||
|
||||
ret = TRUE;
|
||||
|
||||
end:
|
||||
if (r != NULL)
|
||||
g_regex_unref (r);
|
||||
|
||||
g_match_info_free (match_info);
|
||||
|
||||
return ret;
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
gboolean
|
||||
@@ -3168,10 +3101,11 @@ gboolean
|
||||
mm_3gpp_parse_cscs_test_response (const gchar *reply,
|
||||
MMModemCharset *out_charsets)
|
||||
{
|
||||
g_autoptr(GRegex) r = NULL;
|
||||
g_autoptr(GMatchInfo) match_info = NULL;
|
||||
MMModemCharset charsets = MM_MODEM_CHARSET_UNKNOWN;
|
||||
GRegex *r;
|
||||
GMatchInfo *match_info;
|
||||
gchar *p, *str;
|
||||
gchar *p;
|
||||
gchar *str;
|
||||
gboolean success = FALSE;
|
||||
|
||||
g_return_val_if_fail (reply != 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,9 +3454,9 @@ GHashTable *
|
||||
mm_3gpp_parse_cind_test_response (const gchar *reply,
|
||||
GError **error)
|
||||
{
|
||||
g_autoptr(GRegex) r = NULL;
|
||||
g_autoptr(GMatchInfo) match_info = NULL;
|
||||
GHashTable *hash;
|
||||
GRegex *r;
|
||||
GMatchInfo *match_info;
|
||||
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,9 +3507,9 @@ GByteArray *
|
||||
mm_3gpp_parse_cind_read_response (const gchar *reply,
|
||||
GError **error)
|
||||
{
|
||||
g_autoptr(GRegex) r = NULL;
|
||||
g_autoptr(GMatchInfo) match_info = NULL;
|
||||
GByteArray *array = NULL;
|
||||
GRegex *r = NULL;
|
||||
GMatchInfo *match_info;
|
||||
GError *inner_error = NULL;
|
||||
guint8 t;
|
||||
|
||||
@@ -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,9 +3542,8 @@ 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;
|
||||
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);
|
||||
@@ -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,8 +3664,8 @@ mm_3gpp_parse_cgev_indication_pdp (const gchar *str,
|
||||
guint *out_cid,
|
||||
GError **error)
|
||||
{
|
||||
GRegex *r;
|
||||
GMatchInfo *match_info = NULL;
|
||||
g_autoptr(GRegex) r = NULL;
|
||||
g_autoptr(GMatchInfo) match_info = NULL;
|
||||
GError *inner_error = NULL;
|
||||
gchar *pdp_type = NULL;
|
||||
gchar *pdp_addr = NULL;
|
||||
@@ -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,8 +3747,8 @@ mm_3gpp_parse_cgev_indication_primary (const gchar *str,
|
||||
guint *out_cid,
|
||||
GError **error)
|
||||
{
|
||||
GRegex *r;
|
||||
GMatchInfo *match_info = NULL;
|
||||
g_autoptr(GRegex) r = NULL;
|
||||
g_autoptr(GMatchInfo) match_info = NULL;
|
||||
GError *inner_error = NULL;
|
||||
guint cid = 0;
|
||||
|
||||
@@ -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,8 +3802,8 @@ mm_3gpp_parse_cgev_indication_secondary (const gchar *str,
|
||||
guint *out_event_type,
|
||||
GError **error)
|
||||
{
|
||||
GRegex *r;
|
||||
GMatchInfo *match_info = NULL;
|
||||
g_autoptr(GRegex) r = NULL;
|
||||
g_autoptr(GMatchInfo) match_info = NULL;
|
||||
GError *inner_error = NULL;
|
||||
guint p_cid = 0;
|
||||
guint cid = 0;
|
||||
@@ -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)
|
||||
{
|
||||
g_autoptr(GRegex) r = NULL;
|
||||
g_autoptr(GMatchInfo) match_info = NULL;
|
||||
GError *inner_error = NULL;
|
||||
GList *list = NULL;
|
||||
GMatchInfo *match_info;
|
||||
GRegex *r;
|
||||
|
||||
/*
|
||||
* +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,9 +4649,9 @@ mm_cdma_parse_crm_test_response (const gchar *reply,
|
||||
MMModemCdmaRmProtocol *max,
|
||||
GError **error)
|
||||
{
|
||||
g_autoptr(GRegex) r = NULL;
|
||||
g_autoptr(GMatchInfo) match_info = NULL;
|
||||
gboolean result = FALSE;
|
||||
GRegex *r;
|
||||
GMatchInfo *match_info = NULL;
|
||||
GError *match_error = NULL;
|
||||
|
||||
/* Expected reply format is:
|
||||
@@ -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;
|
||||
g_autoptr(GRegex) r = NULL;
|
||||
g_autoptr(GMatchInfo) match_info = NULL;
|
||||
GError *match_error = NULL;
|
||||
guint year = 0, month = 0, day = 0, hour = 0, minute = 0, second = 0;
|
||||
guint year = 0;
|
||||
guint month = 0;
|
||||
guint day = 0;
|
||||
guint hour = 0;
|
||||
guint minute = 0;
|
||||
guint second = 0;
|
||||
gint tz = 0;
|
||||
gboolean ret = FALSE;
|
||||
|
||||
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,9 +5029,9 @@ gint
|
||||
mm_parse_csim_response (const gchar *response,
|
||||
GError **error)
|
||||
{
|
||||
GMatchInfo *match_info = NULL;
|
||||
GRegex *r = NULL;
|
||||
gchar *str_code = 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;
|
||||
@@ -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;
|
||||
|
||||
@@ -269,7 +269,7 @@ parse_unsolicited (MMPortSerial *port, GByteArray *response)
|
||||
|
||||
for (iter = self->priv->unsolicited_msg_handlers; iter; iter = iter->next) {
|
||||
MMAtUnsolicitedMsgHandler *handler = (MMAtUnsolicitedMsgHandler *) iter->data;
|
||||
GMatchInfo *match_info;
|
||||
g_autoptr(GMatchInfo) match_info = NULL;
|
||||
gboolean matches;
|
||||
|
||||
if (!handler->enable)
|
||||
@@ -286,12 +286,10 @@ parse_unsolicited (MMPortSerial *port, GByteArray *response)
|
||||
}
|
||||
}
|
||||
|
||||
g_match_info_free (match_info);
|
||||
|
||||
if (matches) {
|
||||
/* Remove matches */
|
||||
char *str;
|
||||
int result_len = response->len;
|
||||
g_autofree gchar *str = NULL;
|
||||
gint result_len = response->len;
|
||||
|
||||
str = g_regex_replace_eval (handler->regex,
|
||||
(const char *) response->data,
|
||||
@@ -301,7 +299,6 @@ parse_unsolicited (MMPortSerial *port, GByteArray *response)
|
||||
|
||||
g_byte_array_remove_range (response, 0, response->len);
|
||||
g_byte_array_append (response, (const guint8 *) str, result_len);
|
||||
g_free (str);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -75,8 +75,8 @@ parse_response (MMPortSerial *port,
|
||||
GError **error)
|
||||
{
|
||||
MMPortSerialGps *self = MM_PORT_SERIAL_GPS (port);
|
||||
g_autoptr(GMatchInfo) match_info = NULL;
|
||||
gboolean matches;
|
||||
GMatchInfo *match_info;
|
||||
gchar *str;
|
||||
gint result_len;
|
||||
guint i;
|
||||
@@ -110,8 +110,6 @@ parse_response (MMPortSerial *port,
|
||||
}
|
||||
}
|
||||
|
||||
g_match_info_free (match_info);
|
||||
|
||||
if (!matches)
|
||||
return MM_PORT_SERIAL_RESPONSE_NONE;
|
||||
|
||||
|
||||
+11
-10
@@ -167,7 +167,7 @@ mm_serial_parser_v1_parse (gpointer data,
|
||||
GError **error)
|
||||
{
|
||||
MMSerialParserV1 *parser = (MMSerialParserV1 *) data;
|
||||
GMatchInfo *match_info;
|
||||
GMatchInfo *match_info = NULL;
|
||||
GError *local_error = NULL;
|
||||
gboolean found = FALSE;
|
||||
char *str = NULL;
|
||||
@@ -242,7 +242,7 @@ mm_serial_parser_v1_parse (gpointer data,
|
||||
local_error = mm_mobile_equipment_error_for_code (atoi (str), log_object);
|
||||
goto done;
|
||||
}
|
||||
g_match_info_free (match_info);
|
||||
g_clear_pointer (&match_info, g_match_info_free);
|
||||
}
|
||||
|
||||
/* Numeric CME errors */
|
||||
@@ -255,7 +255,7 @@ mm_serial_parser_v1_parse (gpointer data,
|
||||
local_error = mm_mobile_equipment_error_for_code (atoi (str), log_object);
|
||||
goto done;
|
||||
}
|
||||
g_match_info_free (match_info);
|
||||
g_clear_pointer (&match_info, g_match_info_free);
|
||||
|
||||
/* Numeric CMS errors */
|
||||
found = g_regex_match_full (parser->regex_cms_error,
|
||||
@@ -267,7 +267,7 @@ mm_serial_parser_v1_parse (gpointer data,
|
||||
local_error = mm_message_error_for_code (atoi (str), log_object);
|
||||
goto done;
|
||||
}
|
||||
g_match_info_free (match_info);
|
||||
g_clear_pointer (&match_info, g_match_info_free);
|
||||
|
||||
/* String CME errors */
|
||||
found = g_regex_match_full (parser->regex_cme_error_str,
|
||||
@@ -279,7 +279,7 @@ mm_serial_parser_v1_parse (gpointer data,
|
||||
local_error = mm_mobile_equipment_error_for_string (str, log_object);
|
||||
goto done;
|
||||
}
|
||||
g_match_info_free (match_info);
|
||||
g_clear_pointer (&match_info, g_match_info_free);
|
||||
|
||||
/* String CMS errors */
|
||||
found = g_regex_match_full (parser->regex_cms_error_str,
|
||||
@@ -291,7 +291,7 @@ mm_serial_parser_v1_parse (gpointer data,
|
||||
local_error = mm_message_error_for_string (str, log_object);
|
||||
goto done;
|
||||
}
|
||||
g_match_info_free (match_info);
|
||||
g_clear_pointer (&match_info, g_match_info_free);
|
||||
|
||||
/* Motorola EZX errors */
|
||||
found = g_regex_match_full (parser->regex_ezx_error,
|
||||
@@ -303,7 +303,7 @@ mm_serial_parser_v1_parse (gpointer data,
|
||||
local_error = mm_mobile_equipment_error_for_code (MM_MOBILE_EQUIPMENT_ERROR_UNKNOWN, log_object);
|
||||
goto done;
|
||||
}
|
||||
g_match_info_free (match_info);
|
||||
g_clear_pointer (&match_info, g_match_info_free);
|
||||
|
||||
/* Last resort; unknown error */
|
||||
found = g_regex_match_full (parser->regex_unknown_error,
|
||||
@@ -313,7 +313,7 @@ mm_serial_parser_v1_parse (gpointer data,
|
||||
local_error = mm_mobile_equipment_error_for_code (MM_MOBILE_EQUIPMENT_ERROR_UNKNOWN, log_object);
|
||||
goto done;
|
||||
}
|
||||
g_match_info_free (match_info);
|
||||
g_clear_pointer (&match_info, g_match_info_free);
|
||||
|
||||
/* Connection failures */
|
||||
found = g_regex_match_full (parser->regex_connect_failed,
|
||||
@@ -341,7 +341,7 @@ mm_serial_parser_v1_parse (gpointer data,
|
||||
local_error = mm_connection_error_for_code (code, log_object);
|
||||
goto done;
|
||||
}
|
||||
g_match_info_free (match_info);
|
||||
g_clear_pointer (&match_info, g_match_info_free);
|
||||
|
||||
/* NA error */
|
||||
found = g_regex_match_full (parser->regex_na,
|
||||
@@ -357,7 +357,8 @@ mm_serial_parser_v1_parse (gpointer data,
|
||||
|
||||
done:
|
||||
g_free (str);
|
||||
g_match_info_free (match_info);
|
||||
g_clear_pointer (&match_info, g_match_info_free);
|
||||
|
||||
if (found)
|
||||
response_clean (response);
|
||||
|
||||
|
||||
@@ -1129,13 +1129,17 @@ test_creg_match (const char *test,
|
||||
RegTestData *data,
|
||||
const CregResult *result)
|
||||
{
|
||||
g_autoptr(GMatchInfo) info = NULL;
|
||||
guint i;
|
||||
GMatchInfo *info = NULL;
|
||||
MMModem3gppRegistrationState state = MM_MODEM_3GPP_REGISTRATION_STATE_UNKNOWN;
|
||||
MMModemAccessTechnology access_tech = MM_MODEM_ACCESS_TECHNOLOGY_UNKNOWN;
|
||||
gulong lac = 0, ci = 0;
|
||||
gulong lac = 0;
|
||||
gulong ci = 0;
|
||||
GError *error = NULL;
|
||||
gboolean success, cgreg = FALSE, cereg = FALSE, c5greg = FALSE;
|
||||
gboolean success;
|
||||
gboolean cgreg = FALSE;
|
||||
gboolean cereg = FALSE;
|
||||
gboolean c5greg = FALSE;
|
||||
guint regex_num = 0;
|
||||
GPtrArray *array;
|
||||
|
||||
@@ -1158,8 +1162,7 @@ test_creg_match (const char *test,
|
||||
regex_num = i;
|
||||
break;
|
||||
}
|
||||
g_match_info_free (info);
|
||||
info = NULL;
|
||||
g_clear_pointer (&info, g_match_info_free);
|
||||
}
|
||||
|
||||
g_debug (" regex_num (%u) == result->regex_num (%u)",
|
||||
@@ -1171,7 +1174,6 @@ test_creg_match (const char *test,
|
||||
|
||||
success = mm_3gpp_parse_creg_response (info, NULL, &state, &lac, &ci, &access_tech, &cgreg, &cereg, &c5greg, &error);
|
||||
|
||||
g_match_info_free (info);
|
||||
g_assert (success);
|
||||
g_assert_no_error (error);
|
||||
g_assert_cmpuint (state, ==, result->state);
|
||||
@@ -3351,10 +3353,10 @@ common_parse_cds (const gchar *str,
|
||||
guint expected_pdu_len,
|
||||
const gchar *expected_pdu)
|
||||
{
|
||||
GMatchInfo *match_info;
|
||||
GRegex *regex;
|
||||
gchar *pdu_len_str;
|
||||
gchar *pdu;
|
||||
g_autoptr(GMatchInfo) match_info = NULL;
|
||||
g_autoptr(GRegex) regex = NULL;
|
||||
g_autofree gchar *pdu_len_str = NULL;
|
||||
g_autofree gchar *pdu = NULL;
|
||||
|
||||
regex = mm_3gpp_cds_regex_get ();
|
||||
g_regex_match (regex, str, 0, &match_info);
|
||||
@@ -3368,12 +3370,6 @@ common_parse_cds (const gchar *str,
|
||||
g_assert (pdu != NULL);
|
||||
|
||||
g_assert_cmpstr (pdu, ==, expected_pdu);
|
||||
|
||||
g_free (pdu);
|
||||
g_free (pdu_len_str);
|
||||
|
||||
g_match_info_free (match_info);
|
||||
g_regex_unref (regex);
|
||||
}
|
||||
|
||||
static void
|
||||
@@ -4143,14 +4139,14 @@ static const ClipUrcTest clip_urc_tests[] = {
|
||||
static void
|
||||
test_clip_indication (void)
|
||||
{
|
||||
GRegex *r;
|
||||
g_autoptr(GRegex) r = NULL;
|
||||
guint i;
|
||||
|
||||
r = mm_voice_clip_regex_get ();
|
||||
|
||||
for (i = 0; i < G_N_ELEMENTS (clip_urc_tests); i++) {
|
||||
GMatchInfo *match_info = NULL;
|
||||
gchar *number;
|
||||
g_autoptr(GMatchInfo) match_info = NULL;
|
||||
g_autofree gchar *number = NULL;
|
||||
guint type;
|
||||
|
||||
g_assert (g_regex_match (r, clip_urc_tests[i].str, 0, &match_info));
|
||||
@@ -4161,12 +4157,7 @@ test_clip_indication (void)
|
||||
|
||||
g_assert (mm_get_uint_from_match_info (match_info, 2, &type));
|
||||
g_assert_cmpuint (type, ==, clip_urc_tests[i].type);
|
||||
|
||||
g_free (number);
|
||||
g_match_info_free (match_info);
|
||||
}
|
||||
|
||||
g_regex_unref (r);
|
||||
}
|
||||
|
||||
/*****************************************************************************/
|
||||
@@ -4188,14 +4179,14 @@ static const CcwaUrcTest ccwa_urc_tests[] = {
|
||||
static void
|
||||
test_ccwa_indication (void)
|
||||
{
|
||||
GRegex *r;
|
||||
g_autoptr(GRegex) r = NULL;
|
||||
guint i;
|
||||
|
||||
r = mm_voice_ccwa_regex_get ();
|
||||
|
||||
for (i = 0; i < G_N_ELEMENTS (ccwa_urc_tests); i++) {
|
||||
GMatchInfo *match_info = NULL;
|
||||
gchar *number;
|
||||
g_autoptr(GMatchInfo) match_info = NULL;
|
||||
g_autofree gchar *number = NULL;
|
||||
guint type;
|
||||
guint class;
|
||||
|
||||
@@ -4210,12 +4201,7 @@ test_ccwa_indication (void)
|
||||
|
||||
g_assert (mm_get_uint_from_match_info (match_info, 3, &class));
|
||||
g_assert_cmpuint (class, ==, ccwa_urc_tests[i].class);
|
||||
|
||||
g_free (number);
|
||||
g_match_info_free (match_info);
|
||||
}
|
||||
|
||||
g_regex_unref (r);
|
||||
}
|
||||
|
||||
/*****************************************************************************/
|
||||
|
||||
Reference in New Issue
Block a user