summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChristoph Lohmann2013-02-25 13:36:40 +0100
committerChristoph Lohmann2013-02-25 13:36:40 +0100
commit7cb0d95509d1b2837e4fa7d131f497800b20d22c (patch)
tree3ea070f2e2982de33a6e842c69887e178b94b5c8
parent37863356b00cd41c24e10243121649473b98824f (diff)
downloadst-7cb0d95509d1b2837e4fa7d131f497800b20d22c.tar.gz
st-7cb0d95509d1b2837e4fa7d131f497800b20d22c.tar.xz
st-7cb0d95509d1b2837e4fa7d131f497800b20d22c.zip
Using strtok_r for the string parsing.
-rw-r--r--st.c32
1 files 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