r3451 - trunk/src/target/gsm/src/gsmd

tick at sita.openmoko.org tick at sita.openmoko.org
Tue Nov 20 10:10:11 CET 2007


Author: tick
Date: 2007-11-20 10:10:06 +0100 (Tue, 20 Nov 2007)
New Revision: 3451

Modified:
   trunk/src/target/gsm/src/gsmd/vendor_ti.c
Log:
[gsmd] slightly changed the cpmb callback because rc could be used uninitialised, and avoids using strtok() on a constant string (Andrzej Zaborowski)



Modified: trunk/src/target/gsm/src/gsmd/vendor_ti.c
===================================================================
--- trunk/src/target/gsm/src/gsmd/vendor_ti.c	2007-11-20 06:19:55 UTC (rev 3450)
+++ trunk/src/target/gsm/src/gsmd/vendor_ti.c	2007-11-20 09:10:06 UTC (rev 3451)
@@ -41,35 +41,25 @@
 static int csq_parse(char *buf, int len, const char *param,
 		     struct gsmd *gsmd)
 {
-	char *tok;
 	struct gsmd_evt_auxdata *aux;
-	struct gsmd_ucmd *ucmd = usock_build_event(GSMD_MSG_EVENT, GSMD_EVT_SIGNAL,
-					     sizeof(*aux));
+	struct gsmd_ucmd *ucmd = usock_build_event(GSMD_MSG_EVENT,
+			GSMD_EVT_SIGNAL, sizeof(*aux));
 
 	DEBUGP("entering csq_parse param=`%s'\n", param);
 	if (!ucmd)
 		return -EINVAL;
-	
-	
+
 	aux = (struct gsmd_evt_auxdata *) ucmd->buf;
-	tok = strtok(param, ",");
-	if (!tok)
+	if (sscanf(param, " %hhi, %hhi",
+				&aux->u.signal.sigq.rssi,
+				&aux->u.signal.sigq.ber) < 2)
 		goto out_free_io;
-	
-	aux->u.signal.sigq.rssi = atoi(tok);
 
-	tok = strtok(NULL, ",");
-	if (!tok)
-		goto out_free_io;
-
-	aux->u.signal.sigq.ber = atoi(tok);
-
 	usock_evt_send(gsmd, ucmd, GSMD_EVT_SIGNAL);
-
 	return 0;
 
 out_free_io:
-	free(ucmd);
+	talloc_free(ucmd);
 	return -EIO;
 }
 
@@ -236,13 +226,14 @@
 	if (er->num_tokens == 5 &&
 	    er->tokens[2].type == GSMD_ECMD_RTT_STRING &&
 		er->tokens[3].type == GSMD_ECMD_RTT_NUMERIC &&
-		er->tokens[4].type == GSMD_ECMD_RTT_STRING)
-		rc = sprintf(atcmd_buf, "AT+CSVM=1,\"%s\",%d", 
-			er->tokens[2].u.string, er->tokens[3].u.numeric);
+		er->tokens[4].type == GSMD_ECMD_RTT_STRING) {
+                snprintf(atcmd_buf, sizeof(atcmd_buf), "AT+CSVM=1,\"%s\",%d",
+                        er->tokens[2].u.string, er->tokens[3].u.numeric);
+                rc = gsmd_simplecmd(g, atcmd_buf);
+       } else {
+                rc  -EINVAL;
+       }
 
-	if(rc)
-		return gsmd_simplecmd(g, atcmd_buf);
-
 	talloc_free(er);
 
 	return rc;





More information about the commitlog mailing list