# st

Unnamed repository; edit this file 'description' to name the repository.

| Log | Files | Refs | README | LICENSE

    commit c6b89f23e7546c30dea42a3c49f99682c5818190
    parent 1c1621da699adae49a4344b145f856dacb57270c
    Author: Christoph Lohmann <20h@r-36.net>
    Date:   Tue, 26 Feb 2013 21:43:40 +0100

    Using strsep and fixing null termination in csiparse.

    Thanks for the hint from Alexander Sedov <alex0player@gmail.com>!

    Diffstat:
    Mconfig.mk | 2+-
    Mst.c | 15+++++++--------

    2 files changed, 8 insertions(+), 9 deletions(-)
    diff --git a/config.mk b/config.mk
    @@ -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
    @@ -1,5 +1,4 @@
     /* See LICENSE for licence details. */
    -#define _XOPEN_SOURCE 600
     #include <ctype.h>
     #include <errno.h>
     #include <fcntl.h>
    @@ -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);
    @@ -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
    @@ -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();