diff options
author | Eric Andersen <andersen@codepoet.org> | 2000-10-18 23:38:13 +0000 |
---|---|---|
committer | Eric Andersen <andersen@codepoet.org> | 2000-10-18 23:38:13 +0000 |
commit | 9b7d191055ade5069c6325fa857e007b4c658b14 (patch) | |
tree | 3546e12e3453e15508dbdfbec0a940e3e3de0647 | |
parent | a6a89eb4477289063cb9ef1cc414b9e748f877f9 (diff) |
More updates. Implement strsignal. Add pwd_grp tests
-rw-r--r-- | include/string.h | 2 | ||||
-rw-r--r-- | libc/signal/Makefile | 2 | ||||
-rw-r--r-- | libc/string/Makefile | 6 | ||||
-rw-r--r-- | libc/string/strerror.c | 4 | ||||
-rw-r--r-- | libc/string/strsignal.c | 36 | ||||
-rw-r--r-- | test/Makefile | 2 | ||||
-rw-r--r-- | test/pwd_grp/.cvsignore | 6 | ||||
-rw-r--r-- | test/pwd_grp/.indent.pro | 33 | ||||
-rw-r--r-- | test/pwd_grp/Makefile | 87 | ||||
-rw-r--r-- | test/pwd_grp/test_grp.c | 100 | ||||
-rw-r--r-- | test/pwd_grp/test_pwd.c | 87 | ||||
-rw-r--r-- | test/signal/.indent.pro | 33 | ||||
-rw-r--r-- | test/signal/signal.c | 116 | ||||
-rw-r--r-- | test/stdlib/Makefile | 2 |
14 files changed, 451 insertions, 65 deletions
diff --git a/include/string.h b/include/string.h index 2c334ba71..e276db7ee 100644 --- a/include/string.h +++ b/include/string.h @@ -95,6 +95,8 @@ extern size_t strcspn __P ((__const char *__s, __const char *__reject)); consists entirely of characters in ACCEPT. */ extern size_t strspn __P ((__const char *__s, __const char *__accept)); +/* Return a string describing the meaning of the signal number in SIG. */ +extern char *strsignal __P ((int __sig)); /* More BSD compatabilty */ #define bcmp memcmp diff --git a/libc/signal/Makefile b/libc/signal/Makefile index 4014fd11d..bc81d0b09 100644 --- a/libc/signal/Makefile +++ b/libc/signal/Makefile @@ -24,7 +24,7 @@ TOPDIR=../ include $(TOPDIR)Rules.mak LIBC=$(TOPDIR)libc.a -CSRC=raise.c +CSRC=raise.c sys_siglist.c COBJS=$(patsubst %.c,%.o, $(CSRC)) OBJS=$(COBJS) diff --git a/libc/string/Makefile b/libc/string/Makefile index 5e6c241cb..0bdb925fd 100644 --- a/libc/string/Makefile +++ b/libc/string/Makefile @@ -32,9 +32,9 @@ MOBJ=strlen.o strcat.o strcpy.o strchr.o strcmp.o strncat.o strncpy.o \ MSRC1=index.c MOBJ1=index.o rindex.o -CSRC=strpbrk.c strsep.c strstr.c strtok.c strcspn.c config.c \ - strspn.c strcasecmp.c strncasecmp.c strerror.c sys_siglist.c \ - bcopy.c bzero.c bcmp.c +CSRC=strpbrk.c strsep.c strstr.c strtok.c strcspn.c config.c strspn.c \ + strcasecmp.c strncasecmp.c strerror.c bcopy.c bzero.c bcmp.c \ + strsignal.c COBJS=$(patsubst %.c,%.o, $(CSRC)) OBJS=$(MOBJ) $(MOBJ1) $(COBJS) diff --git a/libc/string/strerror.c b/libc/string/strerror.c index 6eeac104e..91565965f 100644 --- a/libc/string/strerror.c +++ b/libc/string/strerror.c @@ -32,14 +32,14 @@ char *strerror(int err) if (sys_nerr) { if (err < 0 || err >= sys_nerr) goto unknown; - return sys_errlist[err]; + strcpy(retbuf, sys_errlist[err]); + return retbuf; } if (err <= 0) goto unknown; unknown: - printf("sys_nerr=%d\n", sys_nerr); strcpy(retbuf, "Unknown Error: errno="); strcat(retbuf, (char *) itoa(err)); return retbuf; diff --git a/libc/string/strsignal.c b/libc/string/strsignal.c new file mode 100644 index 000000000..e1f7ab129 --- /dev/null +++ b/libc/string/strsignal.c @@ -0,0 +1,36 @@ +/* vi: set sw=4 ts=4: */ +/* Copyright (C) 2000 Erik Andersen <andersen@lineo.com>, <andersee@debian.org> + * This file is part of the uC-Linux and is distributed under the + * GNU Library General Public License. + */ + +#include <string.h> +#include <malloc.h> +#include <signal.h> + +extern __const char *__const _sys_siglist[_NSIG]; +extern __const char *__const sys_siglist[_NSIG]; + +/********************** Function strsignal ************************************/ + +char *strsignal (int sig) +{ + static char retbuf[80]; + + if (sys_siglist) { + if (sig < 0 || sig >= _NSIG) + goto unknown; + strcpy(retbuf, sys_siglist[sig]); + return retbuf; + } + + if (sig <= 0) + goto unknown; + + unknown: + strcpy(retbuf, "Unknown Signal: "); + strcat(retbuf, (char *) itoa(sig)); + return retbuf; +} + +/********************** THE END ********************************************/ diff --git a/test/Makefile b/test/Makefile index 5c647822b..ebc60523d 100644 --- a/test/Makefile +++ b/test/Makefile @@ -20,7 +20,7 @@ # other sundry sources. Files within this library are copyright by their # respective copyright holders. -DIRS = assert ctype silly stdlib string +DIRS = assert ctype pwd_grp signal silly stdlib string all: subdirs tags: diff --git a/test/pwd_grp/.cvsignore b/test/pwd_grp/.cvsignore new file mode 100644 index 000000000..b2b052525 --- /dev/null +++ b/test/pwd_grp/.cvsignore @@ -0,0 +1,6 @@ +test_grp +test_grp.o +test_grp.out +test_grp_glibc +test_grp_glibc.o +test_grp_glibc.out diff --git a/test/pwd_grp/.indent.pro b/test/pwd_grp/.indent.pro new file mode 100644 index 000000000..492ecf1c7 --- /dev/null +++ b/test/pwd_grp/.indent.pro @@ -0,0 +1,33 @@ +--blank-lines-after-declarations +--blank-lines-after-procedures +--break-before-boolean-operator +--no-blank-lines-after-commas +--braces-on-if-line +--braces-on-struct-decl-line +--comment-indentation25 +--declaration-comment-column25 +--no-comment-delimiters-on-blank-lines +--cuddle-else +--continuation-indentation4 +--case-indentation0 +--else-endif-column33 +--space-after-cast +--line-comments-indentation0 +--declaration-indentation1 +--dont-format-first-column-comments +--dont-format-comments +--honour-newlines +--indent-level4 +/* changed from 0 to 4 */ +--parameter-indentation4 +--line-length78 /* changed from 75 */ +--continue-at-parentheses +--no-space-after-function-call-names +--dont-break-procedure-type +--dont-star-comments +--leave-optional-blank-lines +--dont-space-special-semicolon +--tab-size4 +/* additions by Mark */ +--case-brace-indentation0 +--leave-preprocessor-space diff --git a/test/pwd_grp/Makefile b/test/pwd_grp/Makefile new file mode 100644 index 000000000..bfeb0e652 --- /dev/null +++ b/test/pwd_grp/Makefile @@ -0,0 +1,87 @@ +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 + +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=test_pwd test_pwd_glibc +TARGETS+=test_grp test_grp_glibc +TARGETS+=test_pwd_diff test_grp_diff + +all: $(TARGETS) + +test_pwd: test_pwd.c Makefile $(TOPDIR)libc.a + -@ echo "-------" + -@ echo " " + -@ echo "Compiling vs uCLibc: " + -@ echo " " + $(CC) $(XCFLAGS) -c $< -o $@.o + $(CC) $(XLDFLAGS) $@.o -o $@ $(EXTRA_LIBS) + -./$@ 2>&1 >test_pwd.out + -@ echo " " + +test_pwd_glibc: test_pwd.c Makefile $(TOPDIR)libc.a + -@ echo "-------" + -@ echo " " + -@ echo "Compiling vs GNU libc: " + -@ echo " " + $(CC) $(YCFLAGS) -c $< -o $@.o + $(CC) $(YLDFLAGS) --static $@.o -o $@ + -./$@ 2>&1 >test_pwd_glibc.out + -@ echo " " + +test_grp: test_grp.c Makefile $(TOPDIR)libc.a + -@ echo "-------" + -@ echo " " + -@ echo "Compiling vs uCLibc: " + -@ echo " " + $(CC) $(XCFLAGS) -c $< -o $@.o + $(CC) $(XLDFLAGS) $@.o -o $@ $(EXTRA_LIBS) + -./$@ 2>&1 >test_grp.out + -@ echo " " + +test_grp_glibc: test_grp.c Makefile $(TOPDIR)libc.a + -@ echo "-------" + -@ echo " " + -@ echo "Compiling vs GNU libc: " + -@ echo " " + $(CC) $(YCFLAGS) -c $< -o $@.o + $(CC) $(YLDFLAGS) --static $@.o -o $@ + -./$@ 2>&1 >test_grp_glibc.out + -@ echo " " + +test_pwd_diff: test_pwd_glibc test_pwd + -@ echo "-------" + -@ echo " " + -@ echo "Diffing output: " + -@ echo " " + -diff -u test_pwd_glibc.out test_pwd.out + -@ echo " " + +test_grp_diff: test_grp_glibc test_grp + -@ echo "-------" + -@ echo " " + -@ echo "Diffing output: " + -@ echo " " + -diff -u test_grp_glibc.out test_grp.out + -@ echo " " + +clean: + rm -f *.[oa] *~ core $(TARGETS) *.out + + diff --git a/test/pwd_grp/test_grp.c b/test/pwd_grp/test_grp.c new file mode 100644 index 000000000..0e9c4a013 --- /dev/null +++ b/test/pwd_grp/test_grp.c @@ -0,0 +1,100 @@ +/* + * test_grp.c - This file is part of the libc-8086/grp package for ELKS, + * Copyright (C) 1995, 1996 Nat Friedman <ndf@linux.mit.edu>. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Library General Public + * License as published by the Free Software Foundation; either + * version 2 of the License, or (at your option) any later version. + * + * This library 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 + * Library General Public License for more details. + * + * You should have received a copy of the GNU Library General Public + * License along with this library; if not, write to the Free + * Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + * + */ + +#include <unistd.h> +#include <stdio.h> +#include <fcntl.h> +#include <grp.h> + +int main(int argc, char **argv) +{ + struct group *group; + char **tmp_mem; + int test_gid; + + fprintf(stdout, "Beginning test of libc/grp...\n"); + + fprintf(stdout, "=> Testing setgrent(), getgrent(), endgrent()...\n"); + fprintf(stdout, "-> setgrent()...\n"); + setgrent(); + fprintf(stdout, "-> getgrent()...\n"); + printf + ("********************************************************************************\n"); + while ((group = getgrent()) != NULL) { + printf("gr_name\t\t: %s\n", group->gr_name); + printf("gr_passwd\t: %s\n", group->gr_passwd); + printf("gr_gid\t\t: %d\n", (int) group->gr_gid); + printf("gr_mem\t\t: "); + fflush(stdout); + tmp_mem = group->gr_mem; + while (*tmp_mem != NULL) { + printf("%s, ", *tmp_mem); + tmp_mem++; + } + printf + ("\n********************************************************************************\n"); + } + fprintf(stdout, "-> endgrent()...\n"); + endgrent(); + fprintf(stdout, + "=> Test of setgrent(), getgrent(), endgrent() complete.\n"); + fprintf(stdout, "=> Testing getgrid(), getgrnam()...\n"); + fprintf(stdout, "-> getgrgid()...\n"); + printf + ("********************************************************************************\n"); + for (test_gid = 0; test_gid < 100; test_gid++) { + fprintf(stdout, "-> getgrgid(%d)...\n", test_gid); + group = getgrgid((gid_t) test_gid); + if (group != NULL) { + printf("gr_name\t: %s\n", group->gr_name); + printf("gr_passwd\t: %s\n", group->gr_passwd); + printf("gr_gid\t: %d\n", (int) group->gr_gid); + printf("gr_mem\t\t: "); + fflush(stdout); + tmp_mem = group->gr_mem; + while (*tmp_mem != NULL) { + printf("%s, ", *tmp_mem); + tmp_mem++; + } + } + printf + ("\n********************************************************************************\n"); + } + fprintf(stdout, "-> getgrnam()...\n"); + group = getgrnam("root"); + if (group == NULL) { + printf(">NULL<\n"); + } else { + printf("gr_name\t: %s\n", group->gr_name); + printf("gr_passwd\t: %s\n", group->gr_passwd); + printf("gr_gid\t: %d\n", (int) group->gr_gid); + printf("gr_mem\t\t: "); + fflush(stdout); + tmp_mem = group->gr_mem; + while (*tmp_mem != NULL) { + printf("%s, ", *tmp_mem); + tmp_mem++; + } + printf("\n"); + } + + + return 0; +} diff --git a/test/pwd_grp/test_pwd.c b/test/pwd_grp/test_pwd.c new file mode 100644 index 000000000..9d2186695 --- /dev/null +++ b/test/pwd_grp/test_pwd.c @@ -0,0 +1,87 @@ +/* + * test_pwd.c - This file is part of the libc-8086/pwd package for ELKS, + * Copyright (C) 1995, 1996 Nat Friedman <ndf@linux.mit.edu>. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Library General Public + * License as published by the Free Software Foundation; either + * version 2 of the License, or (at your option) any later version. + * + * This library 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 + * Library General Public License for more details. + * + * You should have received a copy of the GNU Library General Public + * License along with this library; if not, write to the Free + * Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + * + */ + +#include <unistd.h> +#include <stdio.h> +#include <fcntl.h> +#include <pwd.h> + +int main(int argc, char **argv) +{ + struct passwd *passwd; + int test_uid; + + fprintf(stdout, "Beginning test of libc/pwd...\n"); + + fprintf(stdout, "=> Testing setpwent(), getpwent(), endpwent()...\n"); + fprintf(stdout, "-> setpwent()...\n"); + setpwent(); + fprintf(stdout, "-> getpwent()...\n"); + printf + ("********************************************************************************\n"); + while ((passwd = getpwent()) != NULL) { + printf("pw_name\t\t: %s\n", passwd->pw_name); + printf("pw_passwd\t: %s\n", passwd->pw_passwd); + printf("pw_uid\t\t: %d\n", (int) passwd->pw_uid); + printf("pw_gid\t\t: %d\n", (int) passwd->pw_gid); + printf("pw_gecos\t: %s\n", passwd->pw_gecos); + printf("pw_dir\t\t: %s\n", passwd->pw_dir); + printf("pw_shell\t: %s\n", passwd->pw_shell); + printf + ("********************************************************************************\n"); + } + fprintf(stdout, "-> endpwent()...\n"); + endpwent(); + fprintf(stdout, + "=> Test of setpwent(), getpwent(), endpwent() complete.\n"); + fprintf(stdout, "=> Testing getpwuid(), getpwnam()...\n"); + fprintf(stdout, "-> getpwuid()...\n"); + printf + ("********************************************************************************\n"); + for (test_uid = 0; test_uid < 1000; test_uid++) { + fprintf(stdout, "-> getpwuid(%d)...\n", test_uid); + passwd = getpwuid((uid_t) test_uid); + if (passwd != NULL) { + printf("pw_name\t\t: %s\n", passwd->pw_name); + printf("pw_passwd\t: %s\n", passwd->pw_passwd); + printf("pw_uid\t\t: %d\n", (int) passwd->pw_uid); + printf("pw_gid\t\t: %d\n", (int) passwd->pw_gid); + printf("pw_gecos\t: %s\n", passwd->pw_gecos); + printf("pw_dir\t\t: %s\n", passwd->pw_dir); + printf("pw_shell\t: %s\n", passwd->pw_shell); + printf + ("********************************************************************************\n"); + } + } + fprintf(stdout, "-> getpwnam()...\n"); + passwd = getpwnam("root"); + if (passwd == NULL) { + printf(">NULL<\n"); + } else { + printf("pw_name\t\t: %s\n", passwd->pw_name); + printf("pw_passwd\t: %s\n", passwd->pw_passwd); + printf("pw_uid\t\t: %d\n", (int) passwd->pw_uid); + printf("pw_gid\t\t: %d\n", (int) passwd->pw_gid); + printf("pw_gecos\t: %s\n", passwd->pw_gecos); + printf("pw_dir\t\t: %s\n", passwd->pw_dir); + printf("pw_shell\t: %s\n", passwd->pw_shell); + } + return 0; +} diff --git a/test/signal/.indent.pro b/test/signal/.indent.pro new file mode 100644 index 000000000..492ecf1c7 --- /dev/null +++ b/test/signal/.indent.pro @@ -0,0 +1,33 @@ +--blank-lines-after-declarations +--blank-lines-after-procedures +--break-before-boolean-operator +--no-blank-lines-after-commas +--braces-on-if-line +--braces-on-struct-decl-line +--comment-indentation25 +--declaration-comment-column25 +--no-comment-delimiters-on-blank-lines +--cuddle-else +--continuation-indentation4 +--case-indentation0 +--else-endif-column33 +--space-after-cast +--line-comments-indentation0 +--declaration-indentation1 +--dont-format-first-column-comments +--dont-format-comments +--honour-newlines +--indent-level4 +/* changed from 0 to 4 */ +--parameter-indentation4 +--line-length78 /* changed from 75 */ +--continue-at-parentheses +--no-space-after-function-call-names +--dont-break-procedure-type +--dont-star-comments +--leave-optional-blank-lines +--dont-space-special-semicolon +--tab-size4 +/* additions by Mark */ +--case-brace-indentation0 +--leave-preprocessor-space diff --git a/test/signal/signal.c b/test/signal/signal.c index fc411a1b9..9198af5f6 100644 --- a/test/signal/signal.c +++ b/test/signal/signal.c @@ -1,21 +1,25 @@ -/* Tester for string functions. - Copyright (C) 1995, 1996, 1997, 1998, 1999 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Library General Public License as - published by the Free Software Foundation; either version 2 of the - License, or (at your option) any later version. - - The GNU C Library 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 - Library General Public License for more details. - - You should have received a copy of the GNU Library General Public - License along with the GNU C Library; see the file COPYING.LIB. If not, - write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, - Boston, MA 02111-1307, USA. */ +/* vi: set sw=4 ts=4: */ +/* + * signal testing function for uC-Libc + * + * Copyright (C) 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 <errno.h> @@ -30,21 +34,20 @@ /* -------------------------------------------------*/ /* This stuff is common to all the testing routines */ /* -------------------------------------------------*/ -const char *it = "<UNSET>"; /* Routine name for message routines. */ +const char *it = "<UNSET>"; /* Routine name for message routines. */ size_t errors = 0; -void check (int thing, int number) +void check(int thing, int number) { - if (!thing) - { - printf("%s flunked test %d\n", it, number); - ++errors; - } + if (!thing) { + printf("%s: flunked test %d\n", it, number); + ++errors; + } } -void equal (const char *a, const char *b, int number) +void equal(const char *a, const char *b, int number) { - check(a != NULL && b != NULL && (strcmp(a, b)==0), number); + check(a != NULL && b != NULL && (strcmp(a, b) == 0), number); } @@ -56,43 +59,42 @@ int global_int = 0; void set_global_int_to_one(int signum) { - printf("entering set_global_int_to_one\n"); - global_int = 1; - return; + printf ("Received signal %d (%s).\n", signum, strsignal(signum)); + global_int = 1; + return; } -void -signal_test_1 (void) +void signal_test_1(void) { - global_int = 0; + global_int = 0; + + it = "global variable set from signal handler"; + signal(SIGUSR1, set_global_int_to_one); + raise(SIGUSR1); - signal(SIGUSR1, set_global_int_to_one); - raise( SIGUSR1); - /* This should have first jumped to the signal handler */ - check ( (global_int == 0), 0); + /* This should already have jumped to the signal handler */ + check((global_int == 1), 1); - signal(SIGUSR1, SIG_DFL); - raise( SIGUSR1); - printf("Here I am.\n"); + global_int = 0; + signal(SIGUSR1, SIG_IGN); + raise(SIGUSR1); + /* This should not go to the signal handler this time since we */ + check((global_int == 0), 1); } -int -main (void) +int main(void) { - int status; - - signal_test_1 (); - - if (errors == 0) - { - status = EXIT_SUCCESS; - printf("No errors.\n"); - } - else - { - status = EXIT_FAILURE; - printf("%d errors.\n", errors); - } - exit(status); + int status; + + signal_test_1(); + + if (errors == 0) { + status = EXIT_SUCCESS; + printf("No errors.\n"); + } else { + status = EXIT_FAILURE; + printf("%d errors.\n", errors); + } + exit(status); } diff --git a/test/stdlib/Makefile b/test/stdlib/Makefile index d33f3f6ca..0140739d7 100644 --- a/test/stdlib/Makefile +++ b/test/stdlib/Makefile @@ -1,5 +1,5 @@ TOPDIR=../../ -include $(TOPDIR)Rules.make +include $(TOPDIR)Rules.mak # Check if 'ls -sh' works or not LSFLAGS = $(shell if ls -sh >/dev/null 2>&1; \ |