tUsing strsep and fixing null termination in csiparse. - st - [fork] customized… | |
git clone git://src.adamsgaard.dk/st | |
Log | |
Files | |
Refs | |
README | |
LICENSE | |
--- | |
commit c6b89f23e7546c30dea42a3c49f99682c5818190 | |
parent 1c1621da699adae49a4344b145f856dacb57270c | |
Author: Christoph Lohmann <[email protected]> | |
Date: Tue, 26 Feb 2013 21:43:40 +0100 | |
Using strsep and fixing null termination in csiparse. | |
Thanks for the hint from Alexander Sedov <[email protected]>! | |
Diffstat: | |
M config.mk | 2 +- | |
M st.c | 15 +++++++-------- | |
2 files changed, 8 insertions(+), 9 deletions(-) | |
--- | |
diff --git a/config.mk b/config.mk | |
t@@ -19,7 +19,7 @@ LIBS = -L/usr/lib -lc -L${X11LIB} -lX11 -lutil -lXext -lXft \ | |
$(shell pkg-config --libs freetype2) | |
# flags | |
-CPPFLAGS = -DVERSION=\"${VERSION}\" | |
+CPPFLAGS = -DVERSION=\"${VERSION}\" -D_BSD_SOURCE -D_XOPEN_SOURCE=600 | |
CFLAGS += -g -std=c99 -pedantic -Wall -Os ${INCS} ${CPPFLAGS} | |
LDFLAGS += -g ${LIBS} | |
diff --git a/st.c b/st.c | |
t@@ -1,5 +1,4 @@ | |
/* See LICENSE for licence details. */ | |
-#define _XOPEN_SOURCE 600 | |
#include <ctype.h> | |
#include <errno.h> | |
#include <fcntl.h> | |
t@@ -1304,6 +1303,7 @@ csiparse(void) { | |
p++; | |
} | |
+ csiescseq.buf[csiescseq.len] = '\0'; | |
while(p < csiescseq.buf+csiescseq.len) { | |
np = NULL; | |
v = strtol(p, &np, 10); | |
t@@ -1925,14 +1925,12 @@ strhandle(void) { | |
void | |
strparse(void) { | |
- char *p = strescseq.buf, *sp; | |
+ char *p = strescseq.buf; | |
+ strescseq.narg = 0; | |
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; | |
- } | |
+ while(p && strescseq.narg < STR_ARG_SIZ) | |
+ strescseq.args[strescseq.narg++] = strsep(&p, ";"); | |
} | |
void | |
t@@ -2109,7 +2107,8 @@ tputc(char *c, int len) { | |
if(term.esc & ESC_CSI) { | |
csiescseq.buf[csiescseq.len++] = ascii; | |
if(BETWEEN(ascii, 0x40, 0x7E) | |
- || csiescseq.len >= ESC_BUF_SIZ) { | |
+ || csiescseq.len >= \ | |
+ sizeof(csiescseq.buf)-1) { | |
term.esc = 0; | |
csiparse(); | |
csihandle(); |