X-Git-Url: https://git.saurik.com/apple/libc.git/blobdiff_plain/5b2abdfbf4211b6592cdd02b9507555a0ecbb04b..refs/heads/master:/gen/getusershell.c?ds=inline diff --git a/gen/getusershell.c b/gen/getusershell.c index 5a5f09a..202a51b 100644 --- a/gen/getusershell.c +++ b/gen/getusershell.c @@ -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 #include @@ -67,15 +69,15 @@ * /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'; }