Using strsep and fixing null termination in csiparse.

Thanks for the hint from Alexander Sedov <alex0player@gmail.com>!
dev
Christoph Lohmann 2013-02-26 21:43:40 +01:00
parent 1c1621da69
commit c6b89f23e7
2 changed files with 8 additions and 9 deletions

View File

@ -19,7 +19,7 @@ LIBS = -L/usr/lib -lc -L${X11LIB} -lX11 -lutil -lXext -lXft \
$(shell pkg-config --libs freetype2) $(shell pkg-config --libs freetype2)
# flags # flags
CPPFLAGS = -DVERSION=\"${VERSION}\" CPPFLAGS = -DVERSION=\"${VERSION}\" -D_BSD_SOURCE -D_XOPEN_SOURCE=600
CFLAGS += -g -std=c99 -pedantic -Wall -Os ${INCS} ${CPPFLAGS} CFLAGS += -g -std=c99 -pedantic -Wall -Os ${INCS} ${CPPFLAGS}
LDFLAGS += -g ${LIBS} LDFLAGS += -g ${LIBS}

15
st.c
View File

@ -1,5 +1,4 @@
/* See LICENSE for licence details. */ /* See LICENSE for licence details. */
#define _XOPEN_SOURCE 600
#include <ctype.h> #include <ctype.h>
#include <errno.h> #include <errno.h>
#include <fcntl.h> #include <fcntl.h>
@ -1304,6 +1303,7 @@ csiparse(void) {
p++; p++;
} }
csiescseq.buf[csiescseq.len] = '\0';
while(p < csiescseq.buf+csiescseq.len) { while(p < csiescseq.buf+csiescseq.len) {
np = NULL; np = NULL;
v = strtol(p, &np, 10); v = strtol(p, &np, 10);
@ -1925,14 +1925,12 @@ strhandle(void) {
void void
strparse(void) { strparse(void) {
char *p = strescseq.buf, *sp; char *p = strescseq.buf;
strescseq.narg = 0;
strescseq.buf[strescseq.len] = '\0'; strescseq.buf[strescseq.len] = '\0';
for(p = strtok_r(p, ";", &sp); p; p = strtok_r(NULL, ";", &sp)) { while(p && strescseq.narg < STR_ARG_SIZ)
if(strescseq.narg == STR_ARG_SIZ) strescseq.args[strescseq.narg++] = strsep(&p, ";");
return;
strescseq.args[strescseq.narg++] = p;
}
} }
void void
@ -2109,7 +2107,8 @@ tputc(char *c, int len) {
if(term.esc & ESC_CSI) { if(term.esc & ESC_CSI) {
csiescseq.buf[csiescseq.len++] = ascii; csiescseq.buf[csiescseq.len++] = ascii;
if(BETWEEN(ascii, 0x40, 0x7E) if(BETWEEN(ascii, 0x40, 0x7E)
|| csiescseq.len >= ESC_BUF_SIZ) { || csiescseq.len >= \
sizeof(csiescseq.buf)-1) {
term.esc = 0; term.esc = 0;
csiparse(); csiparse();
csihandle(); csihandle();