X-Git-Url: http://erislabs.net/gitweb/?a=blobdiff_plain;f=lib%2Fgetusershell.c;h=3401c885d404c6b0c5b5fce886bdba696a795a87;hb=7f5a14a4366b8696b9f58cc78d8b3a02912ffc6d;hp=35f72dbcbd763ffa9026e10f71bc81617df706d0;hpb=c81ef04f8c788c32c9cd97957e1a0cfdd947a0ec;p=gnulib.git diff --git a/lib/getusershell.c b/lib/getusershell.c index 35f72dbcb..3401c885d 100644 --- a/lib/getusershell.c +++ b/lib/getusershell.c @@ -1,5 +1,5 @@ /* getusershell.c -- Return names of valid user shells. - Copyright (C) 1991, 1997, 2000 Free Software Foundation, Inc. + Copyright (C) 1991, 1997, 2000, 2001, 2003 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 @@ -22,12 +22,21 @@ #endif #ifndef SHELLS_FILE +# ifndef __DJGPP__ /* File containing a list of nonrestricted shells, one per line. */ -# define SHELLS_FILE "/etc/shells" +# define SHELLS_FILE "/etc/shells" +# else +/* This is a horrible kludge. Isn't there a better way? */ +# define SHELLS_FILE "/dev/env/DJDIR/etc/shells" +# endif #endif #include +#if HAVE_STDLIB_H +# include +#endif #include +#include "unlocked-io.h" #include "xalloc.h" #if defined (STDC_HEADERS) || (!defined (isascii) && !defined (HAVE_ISASCII)) @@ -40,9 +49,17 @@ static int readname (); +#if ! defined ADDITIONAL_DEFAULT_SHELLS && defined __MSDOS__ +# define ADDITIONAL_DEFAULT_SHELLS \ + "c:/dos/command.com", "c:/windows/command.com", "c:/command.com", +#else +# define ADDITIONAL_DEFAULT_SHELLS /* empty */ +#endif + /* List of shells to use if the shells file is missing. */ static char const* const default_shells[] = { + ADDITIONAL_DEFAULT_SHELLS "/bin/sh", "/bin/csh", "/usr/bin/sh", "/usr/bin/csh", NULL }; @@ -100,10 +117,8 @@ void setusershell () { default_index = 0; - if (shellstream == NULL) - shellstream = fopen (SHELLS_FILE, "r"); - else - fseek (shellstream, 0L, 0); + if (shellstream) + rewind (shellstream); } /* Close the shells file. */ @@ -138,7 +153,7 @@ readname (name, size, stream) if (*name == NULL) { *size = 10; - *name = (char *) xmalloc (*size); + *name = xmalloc (*size); } /* Skip blank space. */ @@ -151,7 +166,7 @@ readname (name, size, stream) while (name_index >= *size) { *size *= 2; - *name = (char *) xrealloc (*name, *size); + *name = xrealloc (*name, *size); } c = getc (stream); }