From 7cb0d95509d1b2837e4fa7d131f497800b20d22c Mon Sep 17 00:00:00 2001 From: Christoph Lohmann <20h@r-36.net> Date: Mon, 25 Feb 2013 13:36:40 +0100 Subject: [PATCH] Using strtok_r for the string parsing. --- st.c | 32 ++++++++++++++------------------ 1 file changed, 14 insertions(+), 18 deletions(-) diff --git a/st.c b/st.c index 23c4caf..7ddce0c 100644 --- 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