]> git.saurik.com Git - apple/libc.git/blobdiff - gen/getusershell.c
Libc-1439.100.3.tar.gz
[apple/libc.git] / gen / getusershell.c
index 5a5f09adbade2aacb6be88fd41047357229ff661..202a51b0a9e12d45b853a4c959bd5bb892dbdb59 100644 (file)
@@ -3,19 +3,20 @@
  *
  * @APPLE_LICENSE_HEADER_START@
  * 
- * The contents of this file constitute Original Code as defined in and
- * are subject to the Apple Public Source License Version 1.1 (the
- * "License").  You may not use this file except in compliance with the
- * License.  Please obtain a copy of the License at
- * http://www.apple.com/publicsource and read it before using this file.
+ * 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
+ * compliance with the License. Please obtain a copy of the License at
+ * http://www.opensource.apple.com/apsl/ and read it before using this
+ * file.
  * 
- * This Original Code and all software distributed under the License are
- * distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY KIND, EITHER
+ * The Original Code and all software distributed under the License are
+ * distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER
  * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES,
  * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE OR NON-INFRINGEMENT.  Please see the
- * License for the specific language governing rights and limitations
- * under the License.
+ * FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT.
+ * Please see the License for the specific language governing rights and
+ * limitations under the License.
  * 
  * @APPLE_LICENSE_HEADER_END@
  */
@@ -52,6 +53,7 @@
  * SUCH DAMAGE.
  */
 
+#include "xlocale_private.h"
 
 #include <sys/param.h>
 #include <sys/file.h>
  * /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 __P((void));
+static char **initshells(void);
 
 /*
  * Get a list of shells from _PATH_SHELLS, if it exists.
  */
 char *
-getusershell()
+getusershell(void)
 {
        char *ret;
 
@@ -88,9 +90,8 @@ getusershell()
 }
 
 void
-endusershell()
+endusershell(void)
 {
-       
        if (shells != NULL)
                free(shells);
        shells = NULL;
@@ -101,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);
@@ -121,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;
@@ -145,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';
        }