st

fork of suckless's simple terminal
Index Commits Files Refs README LICENSE
commit 7cb0d95509d1b2837e4fa7d131f497800b20d22c
parent 37863356b00cd41c24e10243121649473b98824f
Author: Christoph Lohmann <20h@r-36.net>
Date:   Mon, 25 Feb 2013 13:36:40 +0100

Using strtok_r for the string parsing.

Diffstat:
Mst.c | 32++++++++++++++------------------
1 file changed, 14 insertions(+), 18 deletions(-)
diff --git a/st.c b/st.c
@@ -1300,8 +1300,10 @@ csiparse(void) {
     long int v;
 
     csiescseq.narg = 0;
-    if(*p == '?')
-        csiescseq.priv = 1, p++;
+    if(*p == '?') {
+        csiescseq.priv = 1;
+        p++;
+    }
 
     while(p < csiescseq.buf+csiescseq.len) {
         np = NULL;
@@ -1928,23 +1930,17 @@ strhandle(void) {
 
 void
 strparse(void) {
-    /*
-     * TODO: Implement parsing like for CSI when required.
-     * Format: ESC type cmd ';' arg0 [';' argn] ESC \
-     */
-    int narg = 0;
-    char *start = strescseq.buf, *end = start + strescseq.len;
-    strescseq.args[0] = start;
-    while(start < end && narg < LEN(strescseq.args)) {
-        start = memchr(start, ';', end - start);
-        if(!start)
-            break;
-        *start++ = '\0';
-        if(start < end) {
-            strescseq.args[++narg] = start;
-        }
+    char *p = strescseq.buf, *np, *sp;
+
+    strescseq.narg = 0;
+    np = strtok_r(strescseq.buf, ";", &sp);
+    while(p < strescseq.buf+strescseq.len && np != NULL) {
+        strescseq.args[strescseq.narg++] = p;
+
+        np = strtok_r(NULL, ";", &sp);
+        if(np != NULL)
+            p = np;
     }
-    strescseq.narg = narg + 1;
 }
 
 void