aboutsummaryrefslogtreecommitdiff
path: root/src/mm-generic-gsm.c
diff options
context:
space:
mode:
authorDan Williams <dcbw@redhat.com>2010-02-09 23:44:23 -0800
committerDan Williams <dcbw@redhat.com>2010-02-09 23:44:23 -0800
commitd8ea5ea003f6e06520ec1254d89ec5fec5438d18 (patch)
tree76c714f6a011dbc69a5b1e89263c2c0c456b8c1c /src/mm-generic-gsm.c
parent95dd4b5be1ebb0408be6e282eb20e2c45df1f253 (diff)
gsm: fix initial PIN checking for devices that echo by default
If the modem echoed commands by default (since we may not have initialized the modem yet), the echoed command would confuse the PIN check reply parser.
Diffstat (limited to 'src/mm-generic-gsm.c')
-rw-r--r--src/mm-generic-gsm.c8
1 files changed, 5 insertions, 3 deletions
diff --git a/src/mm-generic-gsm.c b/src/mm-generic-gsm.c
index fb141915..d26f1171 100644
--- a/src/mm-generic-gsm.c
+++ b/src/mm-generic-gsm.c
@@ -203,8 +203,8 @@ pin_check_done (MMSerialPort *port,
if (error)
info->error = g_error_copy (error);
- else if (g_str_has_prefix (response->str, "+CPIN: ")) {
- const char *str = response->str + 7;
+ else if (response && strstr (response->str, "+CPIN: ")) {
+ const char *str = strstr (response->str, "+CPIN: ") + 7;
if (g_str_has_prefix (str, "READY")) {
mm_modem_base_set_unlock_required (MM_MODEM_BASE (info->modem), NULL);
@@ -328,7 +328,9 @@ initial_pin_check_done (MMModem *modem, GError *error, gpointer user_data)
g_return_if_fail (MM_IS_GENERIC_GSM (modem));
priv = MM_GENERIC_GSM_GET_PRIVATE (modem);
- if (error && priv->pin_check_tries++ < 3) {
+ if ( error
+ && priv->pin_check_tries++ < 3
+ && !mm_modem_base_get_unlock_required (MM_MODEM_BASE (modem))) {
/* Try it again a few times */
if (priv->pin_check_timeout)
g_source_remove (priv->pin_check_timeout);