~petersanchez/st

288f80cb06b442ef0f55ea62bbceb3260338bf7a — Roberto E. Vargas Caballero 9 years ago c9357a8
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.
2 files changed, 14 insertions(+), 3 deletions(-)

M config.mk
M st.c
M config.mk => config.mk +1 -1
@@ 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}


M st.c => st.c +13 -2
@@ 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