# st

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

| Log | Files | Refs | README | LICENSE

    commit 288f80cb06b442ef0f55ea62bbceb3260338bf7a
    parent c9357a8edfe6d047da95b85c5f3c18b9db40d172
    Author: Roberto E. Vargas Caballero <k0ga@shike2.com>
    Date:   Fri, 20 Mar 2015 06:46:59 +0000

    Remove strsep() call

    strsep() is not a POSIX function, and it means that every system
    needs different defines to expose it. If the prototype of strsep
    is not exposed then an ugly int/pointer is done and it might mean
    a crash. The best solution?, to remove the strsep and make a custom
    loop. If C programmers cannot do this kind of loops without calling
    a library function, then maybe we should move all the suckless
    software to Java.

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

    2 files changed, 14 insertions(+), 3 deletions(-)
    diff --git a/config.mk b/config.mk
    @@ -19,7 +19,7 @@ LIBS = -L/usr/lib -lc -L${X11LIB} -lm -lrt -lX11 -lutil -lXext -lXft \
            `pkg-config --libs freetype2`

     # flags
    -CPPFLAGS = -DVERSION=\"${VERSION}\" -D_DEFAULT_SOURCE -D_XOPEN_SOURCE=600
    +CPPFLAGS = -DVERSION=\"${VERSION}\" -D_XOPEN_SOURCE=600
     CFLAGS += -g -std=c99 -pedantic -Wall -Wvariadic-macros -Os ${INCS} ${CPPFLAGS}
     LDFLAGS += -g ${LIBS}

    diff --git a/st.c b/st.c
    @@ -2272,12 +2272,23 @@ strhandle(void) {

     void
     strparse(void) {
    +	int c;
     	char *p = strescseq.buf;

     	strescseq.narg = 0;
     	strescseq.buf[strescseq.len] = '\0';
    -	while(p && strescseq.narg < STR_ARG_SIZ)
    -		strescseq.args[strescseq.narg++] = strsep(&p, ";");
    +
    +	if(*p == '\0')
    +		return;
    +
    +	while(strescseq.narg < STR_ARG_SIZ) {
    +		strescseq.args[strescseq.narg++] = p;
    +		while((c = *p) != ';' && c != '\0')
    +			++p;
    +		if(c == '\0')
    +			return;
    +		*p++ = '\0';
    +	}
     }

     void