]> git.saurik.com Git - apple/libc.git/blobdiff - gen/getusershell.c
Libc-1082.20.4.tar.gz
[apple/libc.git] / gen / getusershell.c
index 9c25b5de4932b38a239e0f0211573def87bc6bf0..202a51b0a9e12d45b853a4c959bd5bb892dbdb59 100644 (file)
@@ -3,8 +3,6 @@
  *
  * @APPLE_LICENSE_HEADER_START@
  * 
- * Copyright (c) 1999-2003 Apple Computer, Inc.  All Rights Reserved.
- * 
  * This file contains Original Code and/or Modifications of Original Code
  * as defined in and that are subject to the Apple Public Source License
  * Version 2.0 (the 'License'). You may not use this file except in
@@ -55,6 +53,7 @@
  * SUCH DAMAGE.
  */
 
+#include "xlocale_private.h"
 
 #include <sys/param.h>
 #include <sys/file.h>
@@ -70,7 +69,7 @@
  * /etc/shells.
  */
 
-static char *okshells[] = { _PATH_BSHELL, _PATH_CSHELL, NULL };
+static const char * const okshells[] = { _PATH_BSHELL, _PATH_CSHELL, NULL };
 static char **curshell, **shells, *strings;
 static char **initshells(void);
 
@@ -78,7 +77,7 @@ static char **initshells(void);
  * Get a list of shells from _PATH_SHELLS, if it exists.
  */
 char *
-getusershell()
+getusershell(void)
 {
        char *ret;
 
@@ -91,9 +90,8 @@ getusershell()
 }
 
 void
-endusershell()
+endusershell(void)
 {
-       
        if (shells != NULL)
                free(shells);
        shells = NULL;
@@ -104,18 +102,18 @@ endusershell()
 }
 
 void
-setusershell()
+setusershell(void)
 {
-
        curshell = initshells();
 }
 
 static char **
-initshells()
+initshells(void)
 {
        register char **sp, *cp;
        register FILE *fp;
        struct stat statb;
+       locale_t loc = __current_locale();
 
        if (shells != NULL)
                free(shells);
@@ -124,21 +122,21 @@ initshells()
                free(strings);
        strings = NULL;
        if ((fp = fopen(_PATH_SHELLS, "r")) == NULL)
-               return (okshells);
+               return ((char **)okshells);
        if (fstat(fileno(fp), &statb) == -1) {
                (void)fclose(fp);
-               return (okshells);
+               return ((char **)okshells);
        }
        if ((strings = malloc((u_int)statb.st_size)) == NULL) {
                (void)fclose(fp);
-               return (okshells);
+               return ((char **)okshells);
        }
        shells = calloc((unsigned)statb.st_size / 3, sizeof (char *));
        if (shells == NULL) {
                (void)fclose(fp);
                free(strings);
                strings = NULL;
-               return (okshells);
+               return ((char **)okshells);
        }
        sp = shells;
        cp = strings;
@@ -148,7 +146,7 @@ initshells()
                if (*cp == '#' || *cp == '\0')
                        continue;
                *sp++ = cp;
-               while (!isspace(*cp) && *cp != '#' && *cp != '\0')
+               while (!isspace_l(*cp, loc) && *cp != '#' && *cp != '\0')
                        cp++;
                *cp++ = '\0';
        }