Using strtok_r for the string parsing.
authorChristoph Lohmann <20h@r-36.net>
Mon, 25 Feb 2013 12:36:40 +0000 (13:36 +0100)
committerChristoph Lohmann <20h@r-36.net>
Mon, 25 Feb 2013 12:36:40 +0000 (13:36 +0100)
st.c

diff --git a/st.c b/st.c
index 23c4caf..7ddce0c 100644 (file)
--- 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