1 В избранное 0 Ответвления 0

OSCHINA-MIRROR/openLuat-LuatOS

Присоединиться к Gitlife
Откройте для себя и примите участие в публичных проектах с открытым исходным кодом с участием более 10 миллионов разработчиков. Приватные репозитории также полностью бесплатны :)
Присоединиться бесплатно
Клонировать/Скачать
iconv.c 1.5 КБ
Копировать Редактировать Web IDE Исходные данные Просмотреть построчно История
Wendal Chen Отправлено 3 месяцев назад 4adbb98
#include <string.h>
#include "iconv.h"
#include "prv_iconv.h"
typedef struct builtin_iconv_map_tag
{
const char *from;
const char *to;
const iconv_fct fct;
}builtin_iconv_map;
static const builtin_iconv_map iconv_map[] =
{
{"ucs2", "gb2312", iconv_ucs2_to_gb2312},
{"ucs2be", "gb2312", iconv_ucs2be_to_gb2312},
{"gb2312", "ucs2", iconv_gb2312_to_ucs2},
{"gb2312", "ucs2be", iconv_gb2312_to_ucs2be},
{"utf8", "ucs2", iconv_utf8_to_ucs2},
{"utf8", "ucs2be", iconv_utf8_to_ucs2be},
{"ucs2", "utf8", iconv_ucs2_to_utf8},
{"ucs2be", "utf8", iconv_ucs2be_to_utf8},
};
iconv_t iconv_open (const char * to_code, const char * from_code)
{
size_t i;
for(i = 0; i < sizeof(iconv_map)/sizeof(iconv_map[0]); i++)
{
if(strcmp(iconv_map[i].from, from_code) == 0 &&
strcmp(iconv_map[i].to, to_code) == 0)
{
return (iconv_t)&iconv_map[i];
}
}
return (iconv_t)-1;
}
size_t iconv_convert (iconv_t __cd, char ** __inbuf, size_t * __inbytesleft, char ** __outbuf, size_t * __outbytesleft)
{
builtin_iconv_map *_map_cd = (builtin_iconv_map *)__cd;
if(__inbuf == NULL || *__inbuf == NULL)
return (size_t)-1;
if(_map_cd < &iconv_map[0] &&
_map_cd > &iconv_map[sizeof(iconv_map)/sizeof(iconv_map[0])])
return (size_t)-1;
return _map_cd->fct(__inbuf, __inbytesleft, __outbuf, __outbytesleft);
}
int iconv_close (iconv_t cd)
{
return 0;
}
1
https://gitlife.ru/oschina-mirror/openLuat-LuatOS.git
git@gitlife.ru:oschina-mirror/openLuat-LuatOS.git
oschina-mirror
openLuat-LuatOS
openLuat-LuatOS
master