亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? l10nflist.c

?? Gsm手機(jī)(短信息,電話簿)開發(fā)庫C++源代碼
?? C
字號(hào):
/* Handle list of needed message catalogs
   Copyright (C) 1995, 1996, 1997 Free Software Foundation, Inc.
   Contributed by Ulrich Drepper <drepper@gnu.ai.mit.edu>, 1995.

   This program is free software; you can redistribute it and/or modify
   it under the terms of the GNU General Public License as published by
   the Free Software Foundation; either version 2, or (at your option)
   any later version.

   This program is distributed in the hope that it will be useful,
   but WITHOUT ANY WARRANTY; without even the implied warranty of
   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
   GNU General Public License for more details.

   You should have received a copy of the GNU General Public License
   along with this program; if not, write to the Free Software Foundation,
   Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.  */

#ifdef HAVE_CONFIG_H
# include <gsm_config.h>
#endif


#if defined HAVE_STRING_H || defined _LIBC
# ifndef _GNU_SOURCE
#  define _GNU_SOURCE	1
# endif
# include <string.h>
#else
# include <strings.h>
# ifndef memcpy
#  define memcpy(Dst, Src, Num) bcopy (Src, Dst, Num)
# endif
#endif
#if !HAVE_STRCHR && !defined _LIBC
# ifndef strchr
#  define strchr index
# endif
#endif

#if defined _LIBC || defined HAVE_ARGZ_H
# include <argz.h>
#endif
#include <ctype.h>
#include <sys/types.h>

#if defined STDC_HEADERS || defined _LIBC
# include <stdlib.h>
#endif

#include "loadinfo.h"

/* On some strange systems still no definition of NULL is found.  Sigh!  */
#ifndef NULL
# if defined __STDC__ && __STDC__
#  define NULL ((void *) 0)
# else
#  define NULL 0
# endif
#endif

/* @@ end of prolog @@ */

#ifdef _LIBC
/* Rename the non ANSI C functions.  This is required by the standard
   because some ANSI C functions will require linking with this object
   file and the name space must not be polluted.  */
# ifndef stpcpy
#  define stpcpy(dest, src) __stpcpy(dest, src)
# endif
#else
# ifndef HAVE_STPCPY
static char *stpcpy PARAMS ((char *dest, const char *src));
# endif
#endif

/* Define function which are usually not available.  */

#if !defined _LIBC && !defined HAVE___ARGZ_COUNT
/* Returns the number of strings in ARGZ.  */
static size_t argz_count__ PARAMS ((const char *argz, size_t len));

static size_t
argz_count__ (argz, len)
     const char *argz;
     size_t len;
{
  size_t count = 0;
  while (len > 0)
    {
      size_t part_len = strlen (argz);
      argz += part_len + 1;
      len -= part_len + 1;
      count++;
    }
  return count;
}
# undef __argz_count
# define __argz_count(argz, len) argz_count__ (argz, len)
#endif	/* !_LIBC && !HAVE___ARGZ_COUNT */

#if !defined _LIBC && !defined HAVE___ARGZ_STRINGIFY
/* Make '\0' separated arg vector ARGZ printable by converting all the '\0's
   except the last into the character SEP.  */
static void argz_stringify__ PARAMS ((char *argz, size_t len, int sep));

static void
argz_stringify__ (argz, len, sep)
     char *argz;
     size_t len;
     int sep;
{
  while (len > 0)
    {
      size_t part_len = strlen (argz);
      argz += part_len;
      len -= part_len + 1;
      if (len > 0)
	*argz++ = sep;
    }
}
# undef __argz_stringify
# define __argz_stringify(argz, len, sep) argz_stringify__ (argz, len, sep)
#endif	/* !_LIBC && !HAVE___ARGZ_STRINGIFY */

#if !defined _LIBC && !defined HAVE___ARGZ_NEXT
static char *argz_next__ PARAMS ((char *argz, size_t argz_len,
				  const char *entry));

static char *
argz_next__ (argz, argz_len, entry)
     char *argz;
     size_t argz_len;
     const char *entry;
{
  if (entry)
    {
      if (entry < argz + argz_len)
        entry = strchr (entry, '\0') + 1;

      return entry >= argz + argz_len ? NULL : (char *) entry;
    }
  else
    if (argz_len > 0)
      return argz;
    else
      return 0;
}
# undef __argz_next
# define __argz_next(argz, len, entry) argz_next__ (argz, len, entry)
#endif	/* !_LIBC && !HAVE___ARGZ_NEXT */


/* Return number of bits set in X.  */
static int pop PARAMS ((int x));

static inline int
pop (x)
     int x;
{
  /* We assume that no more than 16 bits are used.  */
  x = ((x & ~0x5555) >> 1) + (x & 0x5555);
  x = ((x & ~0x3333) >> 2) + (x & 0x3333);
  x = ((x >> 4) + x) & 0x0f0f;
  x = ((x >> 8) + x) & 0xff;

  return x;
}


struct loaded_l10nfile *
_nl_make_l10nflist (l10nfile_list, dirlist, dirlist_len, mask, language,
		    territory, codeset, normalized_codeset, modifier, special,
		    sponsor, revision, filename, do_allocate)
     struct loaded_l10nfile **l10nfile_list;
     const char *dirlist;
     size_t dirlist_len;
     int mask;
     const char *language;
     const char *territory;
     const char *codeset;
     const char *normalized_codeset;
     const char *modifier;
     const char *special;
     const char *sponsor;
     const char *revision;
     const char *filename;
     int do_allocate;
{
  char *abs_filename;
  struct loaded_l10nfile *last = NULL;
  struct loaded_l10nfile *retval;
  char *cp;
  size_t entries;
  int cnt;

  /* Allocate room for the full file name.  */
  abs_filename = (char *) malloc (dirlist_len
				  + strlen (language)
				  + ((mask & TERRITORY) != 0
				     ? strlen (territory) + 1 : 0)
				  + ((mask & XPG_CODESET) != 0
				     ? strlen (codeset) + 1 : 0)
				  + ((mask & XPG_NORM_CODESET) != 0
				     ? strlen (normalized_codeset) + 1 : 0)
				  + (((mask & XPG_MODIFIER) != 0
				      || (mask & CEN_AUDIENCE) != 0)
				     ? strlen (modifier) + 1 : 0)
				  + ((mask & CEN_SPECIAL) != 0
				     ? strlen (special) + 1 : 0)
				  + (((mask & CEN_SPONSOR) != 0
				      || (mask & CEN_REVISION) != 0)
				     ? (1 + ((mask & CEN_SPONSOR) != 0
					     ? strlen (sponsor) + 1 : 0)
					+ ((mask & CEN_REVISION) != 0
					   ? strlen (revision) + 1 : 0)) : 0)
				  + 1 + strlen (filename) + 1);

  if (abs_filename == NULL)
    return NULL;

  retval = NULL;
  last = NULL;

  /* Construct file name.  */
  memcpy (abs_filename, dirlist, dirlist_len);
  __argz_stringify (abs_filename, dirlist_len, ':');
  cp = abs_filename + (dirlist_len - 1);
  *cp++ = '/';
  cp = stpcpy (cp, language);

  if ((mask & TERRITORY) != 0)
    {
      *cp++ = '_';
      cp = stpcpy (cp, territory);
    }
  if ((mask & XPG_CODESET) != 0)
    {
      *cp++ = '.';
      cp = stpcpy (cp, codeset);
    }
  if ((mask & XPG_NORM_CODESET) != 0)
    {
      *cp++ = '.';
      cp = stpcpy (cp, normalized_codeset);
    }
  if ((mask & (XPG_MODIFIER | CEN_AUDIENCE)) != 0)
    {
      /* This component can be part of both syntaces but has different
	 leading characters.  For CEN we use `+', else `@'.  */
      *cp++ = (mask & CEN_AUDIENCE) != 0 ? '+' : '@';
      cp = stpcpy (cp, modifier);
    }
  if ((mask & CEN_SPECIAL) != 0)
    {
      *cp++ = '+';
      cp = stpcpy (cp, special);
    }
  if ((mask & (CEN_SPONSOR | CEN_REVISION)) != 0)
    {
      *cp++ = ',';
      if ((mask & CEN_SPONSOR) != 0)
	cp = stpcpy (cp, sponsor);
      if ((mask & CEN_REVISION) != 0)
	{
	  *cp++ = '_';
	  cp = stpcpy (cp, revision);
	}
    }

  *cp++ = '/';
  stpcpy (cp, filename);

  /* Look in list of already loaded domains whether it is already
     available.  */
  last = NULL;
  for (retval = *l10nfile_list; retval != NULL; retval = retval->next)
    if (retval->filename != NULL)
      {
	int compare = strcmp (retval->filename, abs_filename);
	if (compare == 0)
	  /* We found it!  */
	  break;
	if (compare < 0)
	  {
	    /* It's not in the list.  */
	    retval = NULL;
	    break;
	  }

	last = retval;
      }

  if (retval != NULL || do_allocate == 0)
    {
      free (abs_filename);
      return retval;
    }

  retval = (struct loaded_l10nfile *)
    malloc (sizeof (*retval) + (__argz_count (dirlist, dirlist_len)
				* (1 << pop (mask))
				* sizeof (struct loaded_l10nfile *)));
  if (retval == NULL)
    return NULL;

  retval->filename = abs_filename;
  retval->decided = (__argz_count (dirlist, dirlist_len) != 1
		     || ((mask & XPG_CODESET) != 0
			 && (mask & XPG_NORM_CODESET) != 0));
  retval->data = NULL;

  if (last == NULL)
    {
      retval->next = *l10nfile_list;
      *l10nfile_list = retval;
    }
  else
    {
      retval->next = last->next;
      last->next = retval;
    }

  entries = 0;
  /* If the DIRLIST is a real list the RETVAL entry corresponds not to
     a real file.  So we have to use the DIRLIST separation mechanism
     of the inner loop.  */
  cnt = __argz_count (dirlist, dirlist_len) == 1 ? mask - 1 : mask;
  for (; cnt >= 0; --cnt)
    if ((cnt & ~mask) == 0
	&& ((cnt & CEN_SPECIFIC) == 0 || (cnt & XPG_SPECIFIC) == 0)
	&& ((cnt & XPG_CODESET) == 0 || (cnt & XPG_NORM_CODESET) == 0))
      {
	/* Iterate over all elements of the DIRLIST.  */
	char *dir = NULL;

	while ((dir = __argz_next ((char *) dirlist, dirlist_len, dir))
	       != NULL)
	  retval->successor[entries++]
	    = _nl_make_l10nflist (l10nfile_list, dir, strlen (dir) + 1, cnt,
				  language, territory, codeset,
				  normalized_codeset, modifier, special,
				  sponsor, revision, filename, 1);
      }
  retval->successor[entries] = NULL;

  return retval;
}

/* Normalize codeset name.  There is no standard for the codeset
   names.  Normalization allows the user to use any of the common
   names.  */
const char *
_nl_normalize_codeset (codeset, name_len)
     const unsigned char *codeset;
     size_t name_len;
{
  int len = 0;
  int only_digit = 1;
  char *retval;
  char *wp;
  size_t cnt;

  for (cnt = 0; cnt < name_len; ++cnt)
    if (isalnum (codeset[cnt]))
      {
	++len;

	if (isalpha (codeset[cnt]))
	  only_digit = 0;
      }

  retval = (char *) malloc ((only_digit ? 3 : 0) + len + 1);

  if (retval != NULL)
    {
      if (only_digit)
	wp = stpcpy (retval, "iso");
      else
	wp = retval;

      for (cnt = 0; cnt < name_len; ++cnt)
	if (isalpha (codeset[cnt]))
	  *wp++ = tolower (codeset[cnt]);
	else if (isdigit (codeset[cnt]))
	  *wp++ = codeset[cnt];

      *wp = '\0';
    }

  return (const char *) retval;
}


/* @@ begin of epilog @@ */

/* We don't want libintl.a to depend on any other library.  So we
   avoid the non-standard function stpcpy.  In GNU C Library this
   function is available, though.  Also allow the symbol HAVE_STPCPY
   to be defined.  */
#if !_LIBC && !HAVE_STPCPY
static char *
stpcpy (dest, src)
     char *dest;
     const char *src;
{
  while ((*dest++ = *src++) != '\0')
    /* Do nothing. */ ;
  return dest - 1;
}
#endif

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
激情综合色播激情啊| 337p日本欧洲亚洲大胆精品| 色屁屁一区二区| 色拍拍在线精品视频8848| 成人激情图片网| va亚洲va日韩不卡在线观看| www.亚洲精品| 91在线视频免费91| 91国产免费看| 欧美日产在线观看| 欧美肥妇毛茸茸| 日韩三级高清在线| 欧美电影免费观看高清完整版 | 久久一日本道色综合| 精品国产一区久久| 国产欧美一区二区精品忘忧草| 久久久精品国产免费观看同学| 中文字幕免费一区| 亚洲黄色尤物视频| 亚洲大型综合色站| 久久av中文字幕片| 成人妖精视频yjsp地址| 91久久人澡人人添人人爽欧美| 精品视频一区三区九区| 欧美一区二区精品在线| 26uuu精品一区二区| 国产精品私房写真福利视频| 亚洲欧美福利一区二区| 天天影视网天天综合色在线播放 | 91精品国产一区二区三区蜜臀 | 国产精品久久久久aaaa| 亚洲一区二区三区三| 毛片av一区二区| 不卡在线视频中文字幕| 欧美日韩成人综合在线一区二区| 亚洲精品一区二区三区香蕉| 亚洲色图欧美在线| 男女激情视频一区| 成人免费毛片app| 欧美日韩国产免费| 久久久99久久| 亚洲激情五月婷婷| 精品一区二区日韩| 91在线观看地址| 3d动漫精品啪啪1区2区免费| 国产日本一区二区| 午夜影视日本亚洲欧洲精品| 国产精品一区三区| 欧美日韩一区二区在线观看视频| 久久理论电影网| 亚洲电影你懂得| 粉嫩13p一区二区三区| 欧美色图12p| 欧美激情在线看| 亚洲成人av一区二区三区| 成人午夜私人影院| 欧美大肚乱孕交hd孕妇| 亚洲一区在线观看免费观看电影高清| 久久精品国产精品青草| 91福利在线观看| 欧美国产1区2区| 蜜臀av在线播放一区二区三区| 99精品欧美一区二区蜜桃免费 | 国内精品免费**视频| 欧美色综合网站| 亚洲欧洲av一区二区三区久久| 日本特黄久久久高潮| 色久综合一二码| 国产精品久久综合| 九九九精品视频| 欧美军同video69gay| 亚洲免费观看高清| 高清成人免费视频| 久久综合九色欧美综合狠狠| 日韩和的一区二区| 欧美色网站导航| 天堂精品中文字幕在线| 日韩一区二区免费在线电影 | 麻豆精品精品国产自在97香蕉| 色婷婷综合在线| 国产精品丝袜黑色高跟| 国产精品亚洲专一区二区三区| 制服丝袜日韩国产| 亚洲国产精品久久艾草纯爱| 91蝌蚪porny成人天涯| 欧美激情一区二区三区| 精品一区二区三区av| 91精品国产综合久久久久久漫画| 亚洲一区二区视频在线| 91视频精品在这里| 亚洲女同ⅹxx女同tv| eeuss鲁一区二区三区| 国产丝袜欧美中文另类| 国产一区二区主播在线| 欧美成人福利视频| 激情六月婷婷久久| 91小视频在线免费看| 亚洲444eee在线观看| 成人av在线一区二区三区| 亚洲国产精品黑人久久久| 国产91露脸合集magnet | 日韩精品一二三| 欧美精品v日韩精品v韩国精品v| 亚洲成av人片一区二区| 欧美精品久久99久久在免费线 | 一区二区日韩电影| 色嗨嗨av一区二区三区| 一区二区三区中文在线| 欧美熟乱第一页| 石原莉奈在线亚洲三区| 欧美性极品少妇| 日韩精品久久久久久| 日韩美女视频在线| 国产精品一线二线三线| 欧美国产日韩a欧美在线观看 | 国产精品国产三级国产有无不卡| 99精品桃花视频在线观看| 一区二区三区四区视频精品免费 | 日韩成人免费电影| 337p亚洲精品色噜噜噜| 麻豆国产欧美日韩综合精品二区| 精品国产一区久久| 丁香天五香天堂综合| 亚洲三级在线播放| 欧美日韩久久久久久| 久久精品国产亚洲高清剧情介绍 | 日韩一区二区三区观看| 久久精品99久久久| 国产喂奶挤奶一区二区三区| 9i在线看片成人免费| 亚洲影院久久精品| 日韩欧美国产不卡| 成人av网在线| 亚洲成人精品在线观看| 精品盗摄一区二区三区| 成人av在线资源网| 午夜免费久久看| 国产视频视频一区| 欧美系列日韩一区| 久久99日本精品| 国产精品福利在线播放| 欧美日韩一二区| 国产精品综合久久| 亚洲综合激情网| 久久新电视剧免费观看| 色拍拍在线精品视频8848| 男男视频亚洲欧美| 国产精品久久久久久妇女6080| 欧美色综合网站| 国产成人av电影在线观看| 亚洲国产成人av| 日本一区二区三区在线观看| 欧美性猛交xxxxxxxx| 国产成人免费在线观看不卡| 午夜精品久久久久久久久| 欧美经典一区二区三区| 69堂国产成人免费视频| 成人免费福利片| 日本中文一区二区三区| 亚洲婷婷国产精品电影人久久| 欧美成人a∨高清免费观看| 色婷婷综合久久| 国产盗摄女厕一区二区三区| 午夜欧美大尺度福利影院在线看| 91老师国产黑色丝袜在线| 亚洲精品国产精品乱码不99| 精品国产伦一区二区三区免费| 91老师国产黑色丝袜在线| 国内外成人在线| 亚洲五码中文字幕| 欧美日韩亚洲综合| 国产高清在线精品| 日本不卡高清视频| 亚洲小少妇裸体bbw| 亚洲欧洲另类国产综合| 久久蜜桃一区二区| 日韩一级黄色片| 欧美专区日韩专区| 99久久综合精品| 国产成人精品免费网站| 久久国产精品99久久人人澡| 五月婷婷综合网| 一区二区在线电影| 亚洲同性同志一二三专区| 中文字幕国产一区| 久久看人人爽人人| 精品黑人一区二区三区久久| 91精品福利在线一区二区三区| 欧美性猛交xxxx乱大交退制版| 91在线观看下载| 成人黄色一级视频| 国产成人av影院| 国产不卡一区视频| 豆国产96在线|亚洲| 粉嫩aⅴ一区二区三区四区五区| 国产精品91xxx| 国产一区二区免费看| 精品一区二区三区蜜桃| 激情国产一区二区 | 国产在线麻豆精品观看|