OSDN Git Service

Add in a fork test. Fix select so it works.
authorEric Andersen <andersen@codepoet.org>
Thu, 26 Oct 2000 09:23:38 +0000 (09:23 -0000)
committerEric Andersen <andersen@codepoet.org>
Thu, 26 Oct 2000 09:23:38 +0000 (09:23 -0000)
libc/sysdeps/linux/common/syscalls.c
test/unistd/Makefile [new file with mode: 0644]
test/unistd/fork.c [new file with mode: 0644]

index c1b1193..ea8ef01 100644 (file)
@@ -515,11 +515,6 @@ _syscall2(int,setgroups,size_t,size,const gid_t *,list);
 #endif
 
 //#define __NR_select                  82
-#ifdef L_select
-#include <unistd.h>
-_syscall5(int,select,int, n, fd_set *,readfds, fd_set *,writefds,
-       fd_set *,exceptfds, struct timeval *,timeout);
-#endif
 
 //#define __NR_symlink                 83
 #ifdef L_symlink 
@@ -840,6 +835,17 @@ SYSCALL__ (getdents, 3)
 #endif
 
 //#define __NR__newselect              142
+#ifdef L__newselect
+#include <unistd.h>
+_syscall5(int,_newselect,int, n, fd_set *,readfds, fd_set *,writefds,
+       fd_set *,exceptfds, struct timeval *,timeout);
+
+int select(int n, fd_set *readfds, fd_set *writefds, fd_set *exceptfds, 
+               struct timeval *timeout)
+{
+       return(_newselect(n, readfds, writefds, exceptfds, timeout));
+}
+#endif
 
 //#define __NR_flock                   143
 #ifdef L_flock 
diff --git a/test/unistd/Makefile b/test/unistd/Makefile
new file mode 100644 (file)
index 0000000..a19905e
--- /dev/null
@@ -0,0 +1,49 @@
+TOPDIR=../../
+include $(TOPDIR)Rules.mak
+
+# Check if 'ls -sh' works or not 
+LSFLAGS = $(shell if ls -sh >/dev/null 2>&1; \
+    then echo "-sh"; else echo "-s" ; fi)
+
+XCFLAGS = -Wall -Os -fomit-frame-pointer -fno-builtin -nostdinc \
+       -I$(TOPDIR)include -I/usr/include/linux
+XLDFLAGS = -nostdlib -s -gc-sections
+EXTRA_LIBS=$(TOPDIR)libc.a -lgcc
+
+YCFLAGS = -Wall -Os -fomit-frame-pointer
+YLDFLAGS = -s --static 
+
+# Allow alternative stripping tools to be used...
+ifndef $(STRIPTOOL)
+       STRIPTOOL = strip
+endif
+STRIP    = $(STRIPTOOL) --remove-section=.note --remove-section=.comment $@
+
+TARGETS=fork fork_glibc
+
+all: $(TARGETS)
+
+fork: fork.c ../testsuite.h Makefile $(TOPDIR)libc.a
+       -@ echo "-------"
+       -@ echo " "
+       -@ echo "Compiling vs uCLibc: "
+       -@ echo " "
+       $(CC) $(XCFLAGS) -c $< -o $@.o
+       $(CC) $(XLDFLAGS) $@.o -o $@ $(EXTRA_LIBS)
+       ./$@
+       -@ echo " "
+
+fork_glibc: fork.c ../testsuite.h Makefile $(TOPDIR)libc.a
+       -@ echo "-------"
+       -@ echo " "
+       -@ echo "Compiling vs GNU libc: "
+       -@ echo " "
+       $(CC) $(YCFLAGS) -c $< -o $@.o
+       $(CC) $(YLDFLAGS) --static $@.o -o $@
+       -./$@
+       -@ echo " "
+
+clean:
+       rm -f *.[oa] *~ core $(TARGETS)
+
+
diff --git a/test/unistd/fork.c b/test/unistd/fork.c
new file mode 100644 (file)
index 0000000..4192af5
--- /dev/null
@@ -0,0 +1,61 @@
+/* vi: set sw=4 ts=4: */
+/*
+ * fork test for uclibc
+ *
+ * Copyright (C) 1999,2000 by Lineo, inc.
+ * Written by Erik Andersen <andersen@lineo.com>, <andersee@debian.org>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ *
+ */
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <unistd.h>
+#include <sys/wait.h>
+
+int main(void) 
+{
+       pid_t pid;
+       int status, wpid;
+
+       if ((pid = fork()) == 0) {
+               printf("The child process sleeps 5 seconds...\n");
+               sleep(5);
+               printf("Child exiting.\n");
+               exit(-1);
+       }
+
+       printf("Parent: waiting for the child to die.\n");
+       while (1) {
+               wpid = wait(&status);
+               if (wpid > 0 && wpid != pid) {
+                       continue;
+               }
+               if (wpid == pid)
+                       break;
+       }
+
+       printf("Child process exited.\nGoodbye.\n");
+       return EXIT_SUCCESS;
+}
+
+/*
+Local Variables:
+c-file-style: "linux"
+c-basic-offset: 4
+tab-width: 4
+End:
+*/