From 1f356f227bc4257c05dc34e961e4017fd927a522 Mon Sep 17 00:00:00 2001 From: Marcel Holtmann Date: Mon, 24 Jan 2011 12:55:25 +0100 Subject: [PATCH] gobi: Handle broken SIM status notification gracefully --- plugins/gobi.c | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/plugins/gobi.c b/plugins/gobi.c index 9d02513d..5024d749 100644 --- a/plugins/gobi.c +++ b/plugins/gobi.c @@ -126,7 +126,7 @@ static void simstat_notify(GAtResult *result, gpointer user_data) struct gobi_data *data = ofono_modem_get_data(modem); GAtResultIter iter; - const char *state; + const char *state, *tmp; if (data->sim == NULL) return; @@ -136,10 +136,17 @@ static void simstat_notify(GAtResult *result, gpointer user_data) if (!g_at_result_iter_next(&iter, "$QCSIMSTAT:")) return; - if (!g_at_result_iter_skip_next(&iter)) + if (!g_at_result_iter_next_unquoted_string(&iter, &tmp)) return; - if (!g_at_result_iter_next_unquoted_string(&iter, &state)) + /* + * When receiving an unsolicited notification, the comma + * is missing ($QCSIMSTAT: 1 SIM INIT COMPLETED). Handle + * this gracefully. + */ + if (g_str_has_prefix(tmp, "1 ") == TRUE) + state = tmp + 2; + else if (!g_at_result_iter_next_unquoted_string(&iter, &state)) return; DBG("state %s", state);