[PATCH] Fix problem parsing space in CRSM response

Oskar Enoksson enok at lysator.liu.se
Wed Oct 29 13:56:14 PDT 2014


My modem (Samsung GI-B3740) had whitespace in CRSM responses e.g.
+CRSM: 144, 0, "98641001415070613508" Parsing the response in mm-base-sim.c
failed. With this patch it works. Just skip whitespace after ',' using
conversion specifier "%*[ ]"
---
 src/mm-base-sim.c | 8 ++++----
 1 file changed, 4 insertions(+), 4 deletions(-)

diff --git a/src/mm-base-sim.c b/src/mm-base-sim.c
index 104e7f8..db3e83b 100644
--- a/src/mm-base-sim.c
+++ b/src/mm-base-sim.c
@@ -952,11 +952,11 @@ parse_iccid (const gchar *response,

     memset (buf, 0, sizeof (buf));
     str = mm_strip_tag (response, "+CRSM:");
-    if (sscanf (str, "%d,%d,\"%20c\"", &sw1, &sw2, (char *) &buf) == 3)
+    if (sscanf (str, "%d,%*[ ]%d,%*[ ]\"%20c\"", &sw1, &sw2, (char *)
&buf) == 3)
         success = TRUE;
     else {
         /* May not include quotes... */
-        if (sscanf (str, "%d,%d,%20c", &sw1, &sw2, (char *) &buf) == 3)
+        if (sscanf (str, "%d,%*[ ]%d,%*[ ]%20c", &sw1, &sw2, (char *)
&buf) == 3)
             success = TRUE;
     }

@@ -1107,11 +1107,11 @@ parse_mnc_length (const gchar *response,
     gchar hex[51];

     memset (hex, 0, sizeof (hex));
-    if (sscanf (response, "+CRSM:%d,%d,\"%50c\"", &sw1, &sw2, (char *)
&hex) == 3)
+    if (sscanf (response, "+CRSM:%d,%*[ ]%d,%*[ ]\"%50c\"", &sw1, &sw2,
(char *) &hex) == 3)
         success = TRUE;
     else {
         /* May not include quotes... */
-        if (sscanf (response, "+CRSM:%d,%d,%50c", &sw1, &sw2, (char *)
&hex) == 3)
+        if (sscanf (response, "+CRSM:%d%*[ ],%d%*[ ],%50c", &sw1, &sw2,
(char *) &hex) == 3)
             success = TRUE;
     }

-- 
1.8.4.5


More information about the ModemManager-devel mailing list