Introduction
Introduction Statistics Contact Development Disclaimer Help
tFixing bugs in the strtol and strtok_r replacements. - st - [fork] customized …
git clone git://src.adamsgaard.dk/st
Log
Files
Refs
README
LICENSE
---
commit 7d32471efffa825f52d24930b5ee617105f9c83e
parent 7cb0d95509d1b2837e4fa7d131f497800b20d22c
Author: Christoph Lohmann <[email protected]>
Date: Tue, 26 Feb 2013 18:19:44 +0100
Fixing bugs in the strtol and strtok_r replacements.
Thanks "Roberto E. Vargas Caballero" <[email protected]> for the comments!
Diffstat:
M st.c | 40 +++++++++++++----------------…
1 file changed, 17 insertions(+), 23 deletions(-)
---
diff --git a/st.c b/st.c
t@@ -1306,23 +1306,18 @@ csiparse(void) {
}
while(p < csiescseq.buf+csiescseq.len) {
- np = NULL;
v = strtol(p, &np, 10);
+ if(np == p)
+ break;
if(v == LONG_MAX || v == LONG_MIN)
v = -1;
- csiescseq.arg[csiescseq.narg] = v;
- if(np != NULL)
- p = np;
-
- if(*p == ';' && csiescseq.narg+1 < ESC_ARG_SIZ) {
- csiescseq.narg++, p++;
- } else {
- csiescseq.mode = *p;
- csiescseq.narg++;
-
- return;
- }
+ csiescseq.arg[csiescseq.narg++] = v;
+ p = np;
+ if(*p != ';' || csiescseq.narg == ESC_ARG_SIZ)
+ break;
+ p++;
}
+ csiescseq.mode = *p;
}
/* for absolute user moves, when decom is set */
t@@ -1930,16 +1925,13 @@ strhandle(void) {
void
strparse(void) {
- char *p = strescseq.buf, *np, *sp;
+ char *p = strescseq.buf, *sp;
- strescseq.narg = 0;
- np = strtok_r(strescseq.buf, ";", &sp);
- while(p < strescseq.buf+strescseq.len && np != NULL) {
+ strescseq.buf[strescseq.len] = '\0';
+ for(p = strtok_r(p, ";", &sp); p; p = strtok_r(NULL, ";", &sp)) {
+ if(strescseq.narg == STR_ARG_SIZ)
+ return;
strescseq.args[strescseq.narg++] = p;
-
- np = strtok_r(NULL, ";", &sp);
- if(np != NULL)
- p = np;
}
}
t@@ -1951,7 +1943,9 @@ strdump(void) {
printf("ESC%c", strescseq.type);
for(i = 0; i < strescseq.len; i++) {
c = strescseq.buf[i] & 0xff;
- if(isprint(c)) {
+ if(c == '\0') {
+ return;
+ } else if(isprint(c)) {
putchar(c);
} else if(c == '\n') {
printf("(\\n)");
t@@ -2039,7 +2033,7 @@ tputc(char *c, int len) {
strhandle();
break;
default:
- if(strescseq.len + len < sizeof(strescseq.buf)) {
+ if(strescseq.len + len < sizeof(strescseq.buf) - 1) {
memmove(&strescseq.buf[strescseq.len], c, len);
strescseq.len += len;
} else {
You are viewing proxied material from mx1.adamsgaard.dk. The copyright of proxied material belongs to its original authors. Any comments or complaints in relation to proxied material should be directed to the original authors of the content concerned. Please see the disclaimer for more details.