diff --git a/configure b/configure index afeaf420f1..fa12bf13ff 100755 --- a/configure +++ b/configure @@ -1573,6 +1573,21 @@ echocheck "linux devfs" echores "$_linux_devfs" +echocheck "strsep()" +cat > $TMPC << EOF +#include +int main (void) { char *s = "Hello, world!"; (void) strsep(&s, ","); return 0; } +EOF +_strsep=no +cc_check && _strsep=yes +if test "$_strsep" = yes ; then + _def_strsep='#define HAVE_STRSEP 1' +else + _def_strsep='#undef HAVE_STRSEP' +fi +echores "$_strsep" + + echocheck "vsscanf()" cat > $TMPC << EOF #include @@ -3484,6 +3499,9 @@ $_def_zlib /* Define this if you have shm support */ $_def_shm +/* Define this if your system has strsep */ +$_def_strsep + /* Define this if your system has vsscanf */ $_def_vsscanf diff --git a/linux/Makefile b/linux/Makefile index ec02fb2acd..4e7ec994ee 100644 --- a/linux/Makefile +++ b/linux/Makefile @@ -3,7 +3,7 @@ include ../config.mak LIBNAME = libosdep.a -SRCS=getch2.c timer-lx.c shmem.c # timer.c +SRCS=getch2.c timer-lx.c shmem.c strsep.c # timer.c OBJS=$(SRCS:.c=.o) ifeq ($(TARGET_ARCH_X86),yes) diff --git a/linux/strsep.c b/linux/strsep.c new file mode 100644 index 0000000000..863a39cc70 --- /dev/null +++ b/linux/strsep.c @@ -0,0 +1,42 @@ +/* strsep implementation for systems that do not have it in libc */ + +#include +#include + +#include "../config.h" + +#ifndef HAVE_STRSEP +char *strsep(char **stringp, const char *delim) { + char *begin, *end; + + begin = *stringp; + if(begin == NULL) + return NULL; + + if(delim[0] == '\0' || delim[1] == '\0') { + char ch = delim[0]; + + if(ch == '\0') + end = NULL; + else { + if(*begin == ch) + end = begin; + else if(*begin == '\0') + end = NULL; + else + end = strchr(begin + 1, ch); + } + } + else + end = strpbrk(begin, delim); + + if(end) { + *end++ = '\0'; + *stringp = end; + } + else + *stringp = NULL; + + return begin; +} +#endif