changeset 5393:cbf0fed4d211

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.
author jkeil
date Fri, 29 Mar 2002 21:24:36 +0000
parents d7c586ebbacf
children cc405b698747
files configure linux/Makefile linux/strsep.c
diffstat 3 files changed, 61 insertions(+), 1 deletions(-) [+]
line wrap: on
line diff
--- 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 <string.h>
+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 <stdarg.h>
@@ -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
 
--- 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)
--- /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 <stdio.h>
+#include <string.h>
+
+#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