Deleted Added
full compact
38c38
< __FBSDID("$FreeBSD: head/lib/libc/locale/setrunelocale.c 101488 2002-08-07 20:49:25Z ache $");
---
> __FBSDID("$FreeBSD: head/lib/libc/locale/setrunelocale.c 101498 2002-08-08 05:51:54Z ache $");
57,58c57
< setrunelocale(encoding)
< char *encoding;
---
> setrunelocale(char *encoding)
62a62,65
> int saverr, ret;
> static char ctype_encoding[ENCODING_LEN + 1];
> static _RuneLocale *CachedRuneLocale;
> static int Cached__mb_cur_max;
74c77
< if (!strcmp(encoding, "C") || !strcmp(encoding, "POSIX")) {
---
> if (strcmp(encoding, "C") == 0 || strcmp(encoding, "POSIX") == 0) {
79a83,95
> /*
> * If the locale name is the same as our cache, use the cache.
> */
> if (CachedRuneLocale != NULL &&
> strcmp(encoding, ctype_encoding) == 0) {
> _CurrentRuneLocale = CachedRuneLocale;
> __mb_cur_max = Cached__mb_cur_max;
> return (0);
> }
>
> /*
> * Slurp the locale file into the cache.
> */
93c109
< return (errno);
---
> return (ENOMEM);
106,108c122,125
< if ((rl = _Read_RuneMagi(fp)) == 0) {
< fclose(fp);
< return (EFTYPE);
---
> if ((rl = _Read_RuneMagi(fp)) == NULL) {
> saverr = errno;
> (void)fclose(fp);
> return (saverr);
110c127
< fclose(fp);
---
> (void)fclose(fp);
112,123c129,138
< if (!rl->encoding[0])
< return (EFTYPE);
< else if (!strcmp(rl->encoding, "NONE"))
< return (_none_init(rl));
< else if (!strcmp(rl->encoding, "UTF2"))
< return (_UTF2_init(rl));
< else if (!strcmp(rl->encoding, "EUC"))
< return (_EUC_init(rl));
< else if (!strcmp(rl->encoding, "BIG5"))
< return (_BIG5_init(rl));
< else if (!strcmp(rl->encoding, "MSKanji"))
< return (_MSKanji_init(rl));
---
> if (strcmp(rl->encoding, "NONE") == 0)
> ret = _none_init(rl);
> else if (strcmp(rl->encoding, "UTF2") == 0)
> ret = _UTF2_init(rl);
> else if (strcmp(rl->encoding, "EUC") == 0)
> ret = _EUC_init(rl);
> else if (strcmp(rl->encoding, "BIG5") == 0)
> ret = _BIG5_init(rl);
> else if (strcmp(rl->encoding, "MSKanji") == 0)
> ret = _MSKanji_init(rl);
125c140,154
< return (EFTYPE);
---
> ret = EFTYPE;
> if (ret == 0) {
> if (CachedRuneLocale != NULL) {
> /* See euc.c */
> if (strcmp(CachedRuneLocale->encoding, "EUC") == 0)
> free(CachedRuneLocale->variable);
> free(CachedRuneLocale);
> }
> CachedRuneLocale = _CurrentRuneLocale;
> Cached__mb_cur_max = __mb_cur_max;
> (void)strcpy(ctype_encoding, encoding);
> } else
> free(rl);
>
> return (ret);