diff options
Diffstat (limited to 'posix')
-rw-r--r-- | posix/Makefile | 2 | ||||
-rw-r--r-- | posix/regex.c | 77 | ||||
-rw-r--r-- | posix/tst-getlogin.c | 58 |
3 files changed, 96 insertions, 41 deletions
diff --git a/posix/Makefile b/posix/Makefile index f8e72b65ae..7861bdf5f3 100644 --- a/posix/Makefile +++ b/posix/Makefile @@ -57,7 +57,7 @@ include ../Makeconfig aux := init-posix environ tests := tstgetopt testfnm runtests runptests \ - tst-preadwrite test-vfork regexbug1 + tst-preadwrite test-vfork regexbug1 tst-getlogin ifeq (yes,$(build-shared)) test-srcs := globtest tests += wordexp-test diff --git a/posix/regex.c b/posix/regex.c index 16e91f1514..04df21e308 100644 --- a/posix/regex.c +++ b/posix/regex.c @@ -164,46 +164,6 @@ char *realloc (); # define SWITCH_ENUM_CAST(x) (x) # endif -/* How many characters in the character set. */ -# define CHAR_SET_SIZE 256 - -# ifdef SYNTAX_TABLE - -extern char *re_syntax_table; - -# else /* not SYNTAX_TABLE */ - -static char re_syntax_table[CHAR_SET_SIZE]; - -static void -init_syntax_once () -{ - register int c; - static int done; - - if (done) - return; - - bzero (re_syntax_table, sizeof re_syntax_table); - - for (c = 'a'; c <= 'z'; c++) - re_syntax_table[c] = Sword; - - for (c = 'A'; c <= 'Z'; c++) - re_syntax_table[c] = Sword; - - for (c = '0'; c <= '9'; c++) - re_syntax_table[c] = Sword; - - re_syntax_table['_'] = Sword; - - done = 1; -} - -# endif /* not SYNTAX_TABLE */ - -# define SYNTAX(c) re_syntax_table[c] - #endif /* not emacs */ /* Get the interface, including the syntax bits. */ @@ -276,6 +236,43 @@ init_syntax_once () # define SIGN_EXTEND_CHAR(c) ((((unsigned char) (c)) ^ 128) - 128) #endif +#ifndef emacs +/* How many characters in the character set. */ +# define CHAR_SET_SIZE 256 + +# ifdef SYNTAX_TABLE + +extern char *re_syntax_table; + +# else /* not SYNTAX_TABLE */ + +static char re_syntax_table[CHAR_SET_SIZE]; + +static void +init_syntax_once () +{ + register int c; + static int done = 0; + + if (done) + return; + bzero (re_syntax_table, sizeof re_syntax_table); + + for (c = 0; c < CHAR_SET_SIZE; ++c) + if (ISALNUM (c)) + re_syntax_table[c] = Sword; + + re_syntax_table['_'] = Sword; + + done = 1; +} + +# endif /* not SYNTAX_TABLE */ + +# define SYNTAX(c) re_syntax_table[((c) & 0xFF)] + +#endif /* emacs */ + /* Should we use malloc or alloca? If REGEX_MALLOC is not defined, we use `alloca' instead of `malloc'. This is because using malloc in re_search* or re_match* could cause memory leaks when C-g is used in diff --git a/posix/tst-getlogin.c b/posix/tst-getlogin.c new file mode 100644 index 0000000000..75c0c5c436 --- /dev/null +++ b/posix/tst-getlogin.c @@ -0,0 +1,58 @@ +/* Copyright (C) 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. */ + +#include <unistd.h> +#include <stdio.h> +#include <string.h> + +int +main (void) +{ + char *login; + int errors = 0; + + login = getlogin (); + if (login == NULL) + puts ("getlogin returned NULL, no further tests"); + else + { + char name[1024]; + int ret; + + printf ("getlogin returned: `%s'\n", login); + + ret = getlogin_r (name, sizeof (name)); + if (ret == 0) + { + printf ("getlogin_r returned: `%s'\n", name); + if (strcmp (name, login) != 0) + { + puts ("Error: getlogin and getlogin_r returned different names"); + ++errors; + } + } + else + { + printf ("Error: getlogin_r returned: %d (%s)\n", + ret, strerror (ret)); + ++errors; + } + } + + return errors != 0; +} |