diff options
author | Dan Williams <dcbw@redhat.com> | 2009-11-30 15:44:20 -0800 |
---|---|---|
committer | Dan Williams <dcbw@redhat.com> | 2009-11-30 15:44:20 -0800 |
commit | 909b8b7c8dbe2de97d9550004641c70411d92c56 (patch) | |
tree | a7546e1461ed81ff9ba9a251fd3fe2decdacf4ad /src/mm-serial-parsers.c | |
parent | c463b5a4005b9e55d0faeb887debe327118ef230 (diff) | |
parent | 0f595adb7f07f575627667480f23775b21f9efb2 (diff) |
Merge commit 'origin/master' into states
Diffstat (limited to 'src/mm-serial-parsers.c')
-rw-r--r-- | src/mm-serial-parsers.c | 14 |
1 files changed, 9 insertions, 5 deletions
diff --git a/src/mm-serial-parsers.c b/src/mm-serial-parsers.c index b36496ff..58985d90 100644 --- a/src/mm-serial-parsers.c +++ b/src/mm-serial-parsers.c @@ -26,15 +26,19 @@ response_clean (GString *response) { char *s; - /* Ends with '<CR><LF>' */ + /* Ends with one or more '<CR><LF>' */ s = response->str + response->len - 1; - if (*s == '\n' && *(--s) == '\r') + while ((s > response->str) && (*s == '\n') && (*(s - 1) == '\r')) { g_string_truncate (response, response->len - 2); + s -= 2; + } - /* Starts with '<CR><LF>' */ + /* Starts with one or more '<CR><LF>' */ s = response->str; - if (*s == '\r' && *(++s) == '\n') + while ((response->len >= 2) && (*s == '\r') && (*(s + 1) == '\n')) { g_string_erase (response, 0, 2); + s = response->str; + } } @@ -199,7 +203,7 @@ mm_serial_parser_v1_new (void) parser = g_slice_new (MMSerialParserV1); - parser->regex_ok = g_regex_new ("\\r\\nOK\\r\\n$", flags, 0, NULL); + parser->regex_ok = g_regex_new ("\\r\\nOK(\\r\\n)+$", flags, 0, NULL); parser->regex_connect = g_regex_new ("\\r\\nCONNECT.*\\r\\n", flags, 0, NULL); parser->regex_detailed_error = g_regex_new ("\\r\\n\\+CME ERROR: (\\d+)\\r\\n$", flags, 0, NULL); parser->regex_unknown_error = g_regex_new ("\\r\\n(ERROR)|(COMMAND NOT SUPPORT)\\r\\n$", flags, 0, NULL); |