# HG changeset patch # User jkeil # Date 1017437076 0 # Node ID cbf0fed4d211bc855a7e3748367d433edbb682fd # Parent d7c586ebbacfb3de3f05688db402f5b0d0a4d519 Add a configure test for the strsep function (it's missing on solaris) Provide an implementation of strsep in libosdep.a, if it's missing in the system's libc library. diff -r d7c586ebbacf -r cbf0fed4d211 configure --- a/configure Fri Mar 29 15:12:41 2002 +0000 +++ b/configure Fri Mar 29 21:24:36 2002 +0000 @@ -1573,6 +1573,21 @@ 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 @@ /* 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 -r d7c586ebbacf -r cbf0fed4d211 linux/Makefile --- a/linux/Makefile Fri Mar 29 15:12:41 2002 +0000 +++ b/linux/Makefile Fri Mar 29 21:24:36 2002 +0000 @@ -3,7 +3,7 @@ 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 -r d7c586ebbacf -r cbf0fed4d211 linux/strsep.c --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/linux/strsep.c Fri Mar 29 21:24:36 2002 +0000 @@ -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