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)
_______________________________________________
svn-src-all@freebsd.org mailing list
http://lists.freebsd.org/mailman/listinfo/svn-src-all
To unsubscribe, send any mail to "svn-src-all-unsubscr...@freebsd.org"

Reply via email to