diff options
author | Roberto E. Vargas Caballero <k0ga@shike2.com> | 2015-03-20 06:46:59 +0000 |
---|---|---|
committer | Roberto E. Vargas Caballero <k0ga@shike2.com> | 2015-03-20 07:29:28 +0000 |
commit | 288f80cb06b442ef0f55ea62bbceb3260338bf7a (patch) | |
tree | 1f3c3a9193e6fcae98f8769a9a39d9cb96e54c94 /st.c | |
parent | c9357a8edfe6d047da95b85c5f3c18b9db40d172 (diff) | |
download | st-288f80cb06b442ef0f55ea62bbceb3260338bf7a.tar.gz st-288f80cb06b442ef0f55ea62bbceb3260338bf7a.tar.bz2 |
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 (limited to 'st.c')
-rw-r--r-- | st.c | 15 |
1 files changed, 13 insertions, 2 deletions
@@ -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 |