(libfu_a_SOURCES): Add oa-hash.c.
[gnulib.git] / lib / getusershell.c
index 6e2e0c1..2f16718 100644 (file)
    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., 675 Mass Ave, Cambridge, MA 02139, USA.  */
+   along with this program; if not, write to the Free Software Foundation,
+   Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.  */
 
 /* Written by David MacKenzie <djm@gnu.ai.mit.edu> */
 
+#ifdef HAVE_CONFIG_H
+# include <config.h>
+#endif
+
 #ifndef SHELLS_FILE
 /* File containing a list of nonrestricted shells, one per line. */
-#define SHELLS_FILE "/etc/shells"
+# define SHELLS_FILE "/etc/shells"
 #endif
 
 #include <stdio.h>
 #include <ctype.h>
 
 #ifdef STDC_HEADERS
-#include <stdlib.h>
+# include <stdlib.h>
 #else
 char *malloc ();
 char *realloc ();
 #endif
 
+char *xstrdup ();
+
 static int readname ();
 
 /* List of shells to use if the shells file is missing. */
-static char *default_shells[] =
+static char const* const default_shells[] =
 {
   "/bin/sh", "/bin/csh", "/usr/bin/sh", "/usr/bin/csh", NULL
 };
@@ -54,6 +60,8 @@ static char *line = NULL;
 static int line_size = 0;
 \f
 /* Return an entry from the shells file, ignoring comment lines.
+   If the file doesn't exist, use the list in DEFAULT_SHELLS (above).
+   In any case, the returned string is in memory allocated through malloc.
    Return NULL if there are no more entries.  */
 
 char *
@@ -63,7 +71,7 @@ getusershell ()
     {
       if (default_shells[default_index])
        /* Not at the end of the list yet.  */
-       return default_shells[default_index++];
+       return xstrdup (default_shells[default_index++]);
       return NULL;
     }
 
@@ -74,7 +82,7 @@ getusershell ()
        {
          /* No shells file.  Use the default list.  */
          default_index = 1;
-         return default_shells[0];
+         return xstrdup (default_shells[0]);
        }
     }
 
@@ -169,7 +177,7 @@ readname (name, size, stream)
   /* Skip blank space.  */
   while ((c = getc (stream)) != EOF && isspace (c))
     /* Do nothing. */ ;
-  
+
   while (c != EOF && !isspace (c))
     {
       (*name)[name_index++] = c;