locale中的几个数据结构(一)

2009-05-13 02:02:52来源:未知 阅读 ()

新老客户大回馈,云服务器低至5折

/usr/src/lib/libc/locale/setlocale.c中定义:

static char *categories[_LC_LAST] = {
    "LC_ALL",
    "LC_COLLATE",
    "LC_CTYPE",
    "LC_MONETARY",
    "LC_NUMERIC",
    "LC_TIME",
    "LC_MESSAGES",
};

定义locale的种类,这些种类在locale配置文件中使用


static char current_categories[_LC_LAST][ENCODING_LEN + 1] = {
    "C",
    "C",
    "C",
    "C",
    "C",
    "C",
    "C",
};

用来保存当前locale的每个种类的内容,初始化每个种类的值均为“C"

/usr/src/lib/libc/locale/locale.h

#define LC_ALL  0
#define LC_COLLATE 1
#define LC_CTYPE 2
#define LC_MONETARY 3
#define LC_NUMERIC 4
#define LC_TIME  5
#define LC_MESSAGES 6
#define _LC_LAST 7




char *_PathLocale;                /* Path to locale storage directory*/

这个全局变量用来保存locale的存储目录,这个变量的值由下面的函数获得:

int __detect_path_locale(void)
{
  if (_PathLocale == NULL) {
      char *p = getenv("PATH_LOCALE");
      if (p != NULL && !issetugid()) {
          if (strlen(p) + 1/*"/"*/ + ENCODING_LEN +
                1/*"/"*/ + CATEGORY_LEN >= PATH_MAX)
          return (ENAMETOOLONG);
          _PathLocale = strdup(p);
          if (_PathLocale == NULL)
              return (errno == 0 ? ENOMEM : errno);
      } else
          _PathLocale = _PATH_LOCALE;
   }
return (0);
}

#define _PATH_LOCALE "/usr/share/locale"


获取当前的环境值:

static const char * __get_locale_env(category)
        int category;           /*category的数值代表locale的种类编号*/
{
        const char *env;
        /* 1. check LC_ALL. */
        env = getenv(categories[0]);
        /* 2. check LC_* */
        if (env == NULL || !*env)
                env = getenv(categories[category]);

标签:

版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有

上一篇:CGICC使用问题汇总

下一篇:GRUB 的Relax BSD的引导菜单