diff options
author | Christoph Lohmann <20h@r-36.net> | 2013-02-25 13:36:40 +0100 |
---|---|---|
committer | Christoph Lohmann <20h@r-36.net> | 2013-02-25 13:36:40 +0100 |
commit | 7cb0d95509d1b2837e4fa7d131f497800b20d22c (patch) | |
tree | 3ea070f2e2982de33a6e842c69887e178b94b5c8 | |
parent | 37863356b00cd41c24e10243121649473b98824f (diff) |
Using strtok_r for the string parsing.
-rw-r--r-- | st.c | 32 |
1 files changed, 14 insertions, 18 deletions
@@ -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 |