tRemove strsep() call - st - [fork] customized build of st, the simple terminal (HTM) git clone git://src.adamsgaard.dk/st (DIR) Log (DIR) Files (DIR) Refs (DIR) README (DIR) LICENSE --- (DIR) commit 288f80cb06b442ef0f55ea62bbceb3260338bf7a (DIR) parent c9357a8edfe6d047da95b85c5f3c18b9db40d172 (HTM) 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: M config.mk | 2 +- M st.c | 15 +++++++++++++-- 2 files changed, 14 insertions(+), 3 deletions(-) --- (DIR) diff --git a/config.mk b/config.mk t@@ -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} (DIR) diff --git a/st.c b/st.c t@@ -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