X-Git-Url: http://erislabs.net/gitweb/?a=blobdiff_plain;f=lib%2Fgetusershell.c;h=6e7a443f12f26cfcea7d3173db0e9ba453c383ba;hb=3667f8e75409ce7df7bc3f561ddd8d03d5be39f2;hp=c026ec0a9c2482b8bf077c97b0f55028fb200d34;hpb=15d3d56a7b7603e5ed4056ca2fce9d923a6649b6;p=gnulib.git diff --git a/lib/getusershell.c b/lib/getusershell.c index c026ec0a9..6e7a443f1 100644 --- a/lib/getusershell.c +++ b/lib/getusershell.c @@ -1,5 +1,7 @@ /* getusershell.c -- Return names of valid user shells. - Copyright (C) 1991, 1997, 2000, 2001, 2003 Free Software Foundation, Inc. + + Copyright (C) 1991, 1997, 2000, 2001, 2003, 2004, 2005, 2006 Free + Software Foundation, Inc. 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 @@ -13,13 +15,11 @@ 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. */ + Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ /* Written by David MacKenzie */ -#ifdef HAVE_CONFIG_H -# include -#endif +#include #ifndef SHELLS_FILE # ifndef __DJGPP__ @@ -31,20 +31,16 @@ # endif #endif -#include #include #include -#include "unlocked-io.h" + +#include "stdio--.h" #include "xalloc.h" -#if defined (STDC_HEADERS) || (!defined (isascii) && !defined (HAVE_ISASCII)) -# define IN_CTYPE_DOMAIN(c) 1 -#else -# define IN_CTYPE_DOMAIN(c) isascii(c) +#if USE_UNLOCKED_IO +# include "unlocked-io.h" #endif -#define ISSPACE(c) (IN_CTYPE_DOMAIN (c) && isspace (c)) - static size_t readname (char **, size_t *, FILE *); #if ! defined ADDITIONAL_DEFAULT_SHELLS && defined __MSDOS__ @@ -145,29 +141,17 @@ readname (char **name, size_t *size, FILE *stream) int c; size_t name_index = 0; - if (*name == NULL) - { - /* The initial size must be a power of two, so that the overflow - check works. */ - *size = 16; - - *name = xmalloc (*size); - } - /* Skip blank space. */ - while ((c = getc (stream)) != EOF && ISSPACE (c)) + while ((c = getc (stream)) != EOF && isspace (c)) /* Do nothing. */ ; - while (c != EOF && !ISSPACE (c)) + for (;;) { + if (*size <= name_index) + *name = x2nrealloc (*name, size, sizeof **name); + if (c == EOF || isspace (c)) + break; (*name)[name_index++] = c; - if (*size < name_index) - { - *size *= 2; - if (! *size) - xalloc_die (); - *name = xrealloc (*name, *size); - } c = getc (stream); } (*name)[name_index] = '\0';