svn commit: r250215 - stable/9/lib/libc/locale
Sergey Kandaurov
pluknet at FreeBSD.org
Fri May 3 15:52:44 UTC 2013
Author: pluknet
Date: Fri May 3 15:52:43 2013
New Revision: 250215
URL: http://svnweb.freebsd.org/changeset/base/250215
Log:
MFC r228269,228921:
- libc: Eliminate 13 relative relocations in wctype().
- libc: Eliminate some relative relocations in setlocale().
Modified:
stable/9/lib/libc/locale/setlocale.c
stable/9/lib/libc/locale/wctype.c
Directory Properties:
stable/9/lib/libc/ (props changed)
Modified: stable/9/lib/libc/locale/setlocale.c
==============================================================================
--- stable/9/lib/libc/locale/setlocale.c Fri May 3 15:28:31 2013 (r250214)
+++ stable/9/lib/libc/locale/setlocale.c Fri May 3 15:52:43 2013 (r250215)
@@ -57,7 +57,7 @@ __FBSDID("$FreeBSD$");
/*
* Category names for getenv()
*/
-static char *categories[_LC_LAST] = {
+static const char categories[_LC_LAST][12] = {
"LC_ALL",
"LC_COLLATE",
"LC_CTYPE",
Modified: stable/9/lib/libc/locale/wctype.c
==============================================================================
--- stable/9/lib/libc/locale/wctype.c Fri May 3 15:28:31 2013 (r250214)
+++ stable/9/lib/libc/locale/wctype.c Fri May 3 15:52:43 2013 (r250215)
@@ -57,35 +57,54 @@ iswctype_l(wint_t wc, wctype_t charclass
wctype_t
wctype_l(const char *property, locale_t locale)
{
- static const struct {
- const char *name;
- wctype_t mask;
- } props[] = {
- { "alnum", _CTYPE_A|_CTYPE_D },
- { "alpha", _CTYPE_A },
- { "blank", _CTYPE_B },
- { "cntrl", _CTYPE_C },
- { "digit", _CTYPE_D },
- { "graph", _CTYPE_G },
- { "lower", _CTYPE_L },
- { "print", _CTYPE_R },
- { "punct", _CTYPE_P },
- { "space", _CTYPE_S },
- { "upper", _CTYPE_U },
- { "xdigit", _CTYPE_X },
- { "ideogram", _CTYPE_I }, /* BSD extension */
- { "special", _CTYPE_T }, /* BSD extension */
- { "phonogram", _CTYPE_Q }, /* BSD extension */
- { "rune", 0xFFFFFF00L }, /* BSD extension */
- { NULL, 0UL }, /* Default */
+ const char *propnames =
+ "alnum\0"
+ "alpha\0"
+ "blank\0"
+ "cntrl\0"
+ "digit\0"
+ "graph\0"
+ "lower\0"
+ "print\0"
+ "punct\0"
+ "space\0"
+ "upper\0"
+ "xdigit\0"
+ "ideogram\0" /* BSD extension */
+ "special\0" /* BSD extension */
+ "phonogram\0" /* BSD extension */
+ "rune\0"; /* BSD extension */
+ static const wctype_t propmasks[] = {
+ _CTYPE_A|_CTYPE_D,
+ _CTYPE_A,
+ _CTYPE_B,
+ _CTYPE_C,
+ _CTYPE_D,
+ _CTYPE_G,
+ _CTYPE_L,
+ _CTYPE_R,
+ _CTYPE_P,
+ _CTYPE_S,
+ _CTYPE_U,
+ _CTYPE_X,
+ _CTYPE_I,
+ _CTYPE_T,
+ _CTYPE_Q,
+ 0xFFFFFF00L
};
- int i;
+ size_t len1, len2;
+ const char *p;
+ const wctype_t *q;
- i = 0;
- while (props[i].name != NULL && strcmp(props[i].name, property) != 0)
- i++;
+ len1 = strlen(property);
+ q = propmasks;
+ for (p = propnames; (len2 = strlen(p)) != 0; p += len2 + 1) {
+ if (len1 == len2 && memcmp(property, p, len1) == 0)
+ return (*q);
+ q++;
+ }
- return (props[i].mask);
+ return (0UL);
}
wctype_t wctype(const char *property)
More information about the svn-src-stable-9
mailing list