[hackers] [st] Remove strsep() call || Roberto E. Vargas Caballero

From: <git_AT_suckless.org>
Date: Fri, 20 Mar 2015 08:35:37 +0100 (CET)

commit 288f80cb06b442ef0f55ea62bbceb3260338bf7a
Author: Roberto E. Vargas Caballero <k0ga_AT_shike2.com>
Date: Fri Mar 20 06:46:59 2015 +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.

diff --git a/config.mk b/config.mk
index 7ae510e..3026d87 100644
--- a/config.mk
+++ b/config.mk
_AT_@ -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
index 68dc2be..39d3fee 100644
--- a/st.c
+++ b/st.c
_AT_@ -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
Received on Fri Mar 20 2015 - 08:35:37 CET

This archive was generated by hypermail 2.3.0 : Fri Mar 20 2015 - 08:36:09 CET