/* Determine a canonical name for the current locale's character encoding.
Copyright (C) 2000-2006, 2008-2012 Free Software Foundation, Inc.
This program is free software; you can redistribute it and/or modify it
under the terms of the GNU Library 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
Library General Public License for more details.
You should have received a copy of the GNU Library General Public License
along with this program; if not, see <http://www.gnu.org/licenses/>. */
/* Written by Bruno Haible <bruno@clisp.org>. */
#include "config.h"
/* Specification. */
#include "localcharset.h"
#include <fcntl.h>
#include <stddef.h>
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#if defined __APPLE__ && defined __MACH__ && HAVE_LANGINFO_CODESET
# define DARWIN7 /* Darwin 7 or newer, i.e. Mac OS X 10.3 or newer */
#endif
#if defined _WIN32 || defined __WIN32__
# define WINDOWS_NATIVE
# include <locale.h>
#endif
#if defined __EMX__
/* Assume EMX program runs on OS/2, even if compiled under DOS. */
# ifndef OS2
# define OS2
# endif
#endif
#if !defined WINDOWS_NATIVE
# include <unistd.h>
# if HAVE_LANGINFO_CODESET
# include <langinfo.h>
# else
# if 0 /* see comment below */
# include <locale.h>
# endif
# endif
# ifdef __CYGWIN__
# define WIN32_LEAN_AND_MEAN
# include <windows.h>
# endif
#elif defined WINDOWS_NATIVE
# define WIN32_LEAN_AND_MEAN
# include <windows.h>
#endif
#if defined OS2
# define INCL_DOS
# include <os2.h>
#endif
/* For MB_CUR_MAX_L */
#if defined DARWIN7
# include <xlocale.h>
#endif
#if ENABLE_RELOCATABLE
# include "relocatable.h"
#else
# define relocate(pathname) (pathname)
#endif
/* Get LIBDIR. */
#ifndef LIBDIR
//# include "configmake.h"
#endif
/* Define O_NOFOLLOW to 0 on platforms where it does not exist. */
#ifndef O_NOFOLLOW
# define O_NOFOLLOW 0
#endif
#if defined _WIN32 || defined __WIN32__ || defined __CYGWIN__ || defined __EMX__ || defined __DJGPP__
/* Native Windows, Cygwin, OS/2, DOS */
# define ISSLASH(C) ((C) == '/' || (C) == '\\')
#endif
#ifndef DIRECTORY_SEPARATOR
# define DIRECTORY_SEPARATOR '/'
#endif
#ifndef ISSLASH
# define ISSLASH(C) ((C) == DIRECTORY_SEPARATOR)
#endif
#if HAVE_DECL_GETC_UNLOCKED
# undef getc
# define getc getc_unlocked
#endif
/* The following static variable is declared 'volatile' to avoid a
possible multithread problem in the function get_charset_aliases. If we
are running in a threaded environment, and if two threads initialize
'charset_aliases' simultaneously, both will produce the same value,
and everything will be ok if the two assignments to 'charset_aliases'
are atomic. But I don't know what will happen if the two assignments mix. */
#if __STDC__ != 1
# define volatile /* empty */
#endif
/* Pointer to the contents of the charset.alias file, if it has already been
read, else NULL. Its format is:
ALIAS_1 '\0' CANONICAL_1 '\0' ... ALIAS_n '\0' CANONICAL_n '\0' '\0' */
static const char * volatile charset_aliases;
/* Return a pointer to the contents of the charset.alias file. */
static const char *
get_charset_aliases (void)
{
const char *cp;
cp = charset_aliases;
if (cp == NULL)
{
#if !(defined DARWIN7 || defined VMS || defined WINDOWS_NATIVE || defined __CYGWIN__ || defined OS2)
const char *dir;
const char *base = "charset.alias";
char *file_name;
/* Make it possible to override the charset.alias location. This is
necessary for running the testsuite before "make install". */
dir = getenv ("CHARSETALIASDIR");
if (dir == NULL || dir[0] == '\0')
dir = relocate (LIBDIR);
/* Concatenate dir and base into freshly allocated file_name. */
{
size_t dir_len = strlen (dir);
size_t base_len = strlen (base);
int add_slash = (dir_len > 0 && !ISSLASH (dir[dir_len - 1]));
file_name = (char *) malloc (dir_len + add_slash + base_len + 1);
if (file_name != NULL)
{
memcpy (file_name, dir, dir_len);
if (add_slash)
file_name[dir_len] = DIRECTORY_SEPARATOR;
memcpy (file_name + dir_len + add_slash, base, base_len + 1);
}
}
if (file_name == NULL)
/* Out of memory. Treat the file as empty. */
cp = "";
else
{
int fd;
/* Open the file. Reject symbolic links on platforms that support
O_NOFOLLOW. This is a security feature. Without it, an attacker
could retrieve parts of the contents (namely, the tail of the
first line that starts with "* ") of an arbitrary file by placing
a symbolic link to that file under the name "charset.alias" in
some writable directory and defining the environment variable
CHARSETALIASDIR to point to that directory. */
fd = open (file_name,
O_RDONLY | (HAVE_WORKING_O_NOFOLLOW ? O_NOFOLLOW : 0));
if (fd < 0)
/* File not found. Treat it as empty. */
cp = "";
else
{
FILE *fp;
fp = fdopen (fd, "r");
if (fp == NULL)
{
/* Out of memory. Treat the file as empty. */
close (fd);
cp = "";
}
else
{
/* Parse the file's contents. */
char *res_ptr = NULL;
size_t res_size = 0;
for (;;)
{
int c;
char buf1[50+1];
char buf2[50+1];
size_t l1, l2;
char *old_res_ptr;
c = getc (fp);
if (c == EOF)
break;
if (c == '\n' || c == ' ' || c == '\t')
continue;
if (c == '#')
{
/* Skip comment, to end of line. */
do
c = getc (fp);
while (!(c == EOF || c == '\n'));
if (c == EOF)
break;
continue;
}
ungetc (c, fp);
if (fscanf (fp, "%50s %50s", buf1, buf2) < 2)
break;
l1 = strlen (buf1);
l2 = strlen (buf2);
old_res_ptr = res_ptr;
if (res_size == 0)
{
res_size = l1 + 1 + l2 + 1;
res_ptr = (char *) malloc (res_size + 1);
}
else
{
res_size += l1 + 1 + l2 + 1;
res_ptr = (char *) realloc (res_ptr, res_size + 1);
}
if (res_ptr == NULL)
{
/* Out of memory. */
res_size = 0;
free (old_res_ptr);
break;
}
strcpy (res_ptr + res_size - (l2 + 1) - (l1 + 1), buf1);
strcpy (res_ptr + res_size - (l2 + 1), buf2);
}
fclose (fp);
if (res_size == 0)
cp = "";
else
{
*(res_ptr + res_size) = '\0';
c
没有合适的资源?快使用搜索试试~ 我知道了~
libiconv1.15 window visualstudio2022版sln
共253个文件
h:222个
def:7个
c:7个
需积分: 0 4 下载量 54 浏览量
2023-12-06
15:45:11
上传
评论
收藏 5.82MB 7Z 举报
温馨提示
liiconv1.15 window visualstudio2022版sln
资源推荐
资源详情
资源评论
收起资源包目录
libiconv1.15 window visualstudio2022版sln (253个子文件)
localcharset.c 20KB
relocatable.c 17KB
iconv.c 16KB
gentranslit.c 8KB
genaliases.c 4KB
genflags.c 4KB
genaliases2.c 3KB
Browse.VC.db 31.55MB
translit.def 156KB
encodings.def 38KB
encodings_dos.def 5KB
encodings_aix.def 3KB
encodings_extra.def 2KB
encodings_osf1.def 1KB
encodings_local.def 1KB
libiconv.vcxproj.filters 1KB
aliases_syshpux.gperf 8KB
aliases_sysaix.gperf 8KB
aliases_syssolaris.gperf 8KB
aliases_sysosf1.gperf 8KB
aliases.gperf 8KB
cns11643_inv.h 935KB
jisx0213.h 275KB
big5.h 256KB
cjk_variants.h 248KB
ksc5601.h 182KB
hkscs1999.h 182KB
gb2312.h 154KB
gbkext_inv.h 147KB
jisx0208.h 145KB
jisx0212.h 131KB
gb12345ext.h 105KB
translit.h 96KB
uhc_1.h 82KB
cns11643_5.h 74KB
aliases_syshpux.h 74KB
aliases_syssolaris.h 73KB
aliases_sysaix.h 73KB
aliases_sysosf1.h 72KB
gbkext2.h 69KB
aliases.h 68KB
cns11643_2.h 64KB
cns11643_15.h 63KB
cns11643_7.h 57KB
cns11643_3.h 56KB
cns11643_6.h 56KB
gbkext1.h 51KB
cns11643_1.h 51KB
uhc_2.h 47KB
isoir165ext.h 45KB
cns11643_4b.h 39KB
cp932ext.h 39KB
hkscs2001.h 33KB
hkscs2004.h 32KB
cns11643_4a.h 27KB
hkscs2008.h 21KB
big5_2003.h 20KB
iso2022_jp2.h 18KB
loop_unicode.h 17KB
iso2022_cnext.h 16KB
iso2022_jp3.h 15KB
loop_wchar.h 15KB
gb18030ext.h 14KB
gb18030.h 14KB
cp1255.h 13KB
iso2022_jpms.h 12KB
vietcomb.h 12KB
gb18030uni.h 12KB
tcvn.h 11KB
cp950.h 11KB
cp1258.h 10KB
utf7.h 10KB
johab_hangul.h 10KB
shift_jisx0213.h 10KB
iconv.h 9KB
euc_jisx0213.h 9KB
iso2022_cn.h 8KB
converters.h 8KB
flags.h 8KB
cp864.h 8KB
koi8_u.h 7KB
koi8_ru.h 7KB
cp932.h 7KB
mac_croatian.h 7KB
mac_romania.h 7KB
cp50221_0212_ext.h 7KB
mac_roman.h 7KB
mac_turkish.h 7KB
big5hkscs2008.h 7KB
mac_iceland.h 7KB
atarist.h 7KB
canonical_syshpux.h 7KB
canonical.h 7KB
canonical_sysosf1.h 7KB
cp863.h 7KB
cp865.h 7KB
cp861.h 7KB
cp437.h 7KB
koi8_r.h 7KB
canonical_sysaix.h 7KB
共 253 条
- 1
- 2
- 3
资源评论
hicome
- 粉丝: 25
- 资源: 29
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- 三菱PLC(Mitsubishi)通讯协议的C#实现,支持FX、Q系列的ASCII-3E、BIN-3E、FX串口格式
- 五一建模20242024
- rainy-day.jpg
- IMG_20240501_171218.jpg
- Swift-内购封装swift版本
- 经典CNN网络之ResNet 图像分类网络实战项目:7种小麦叶片病害分类(迁移学习)
- Java毕设之ssm010基于ssm的新能源汽车在线租赁管理系统+vue.rar
- Java毕设之ssm009毕业生就业信息统计系统+vue.rar
- Java毕设之ssm008医院门诊挂号系统+jsp.rar
- Java毕设之ssm007亚盛汽车配件销售业绩管理统+jsp.rar
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功