tRemove strsep() call - st - [fork] customized build of st, the simple terminal | |
git clone git://src.adamsgaard.dk/st | |
Log | |
Files | |
Refs | |
README | |
LICENSE | |
--- | |
commit 288f80cb06b442ef0f55ea62bbceb3260338bf7a | |
parent c9357a8edfe6d047da95b85c5f3c18b9db40d172 | |
Author: Roberto E. Vargas Caballero <[email protected]> | |
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(-) | |
--- | |
diff --git a/config.mk b/config.mk | |
t@@ -19,7 +19,7 @@ LIBS = -L/usr/lib -lc -L${X11LIB} -lm -lrt -lX11 -lutil -lXe… | |
`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 | |
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 |