/* used in gram.c and devX11.c */ size_t ucstomb(char *s, const unsigned int wc) { char buf[MB_CUR_MAX+1]; void *cd = NULL ; unsigned int wcs[2]; const char *inbuf = (const char *) wcs; size_t inbytesleft = sizeof(unsigned int); /* better be 4 */ char *outbuf = buf; size_t outbytesleft = sizeof(buf); size_t status; if(wc == 0) {*s = '\0'; return 1;} memset(buf, 0, sizeof(buf)); memset(wcs, 0, sizeof(wcs)); wcs[0] = wc; if(ucsmb_obj == NULL) { if((void *)(-1) == (cd = Riconv_open("", UNICODE))) { #ifndef Win32 char tocode[128]; /* locale set fuzzy case */ strncpy(tocode, locale2charset(NULL), sizeof(tocode)); tocode[sizeof(tocode) - 1] = '\0'; if((void *)(-1) == (cd = Riconv_open(tocode, UNICODE))) return (size_t)(-1); #else return (size_t)(-1); #endif } ucsmb_obj = cd; } status = Riconv(ucsmb_obj, &inbuf, &inbytesleft, &outbuf, &outbytesleft); if (status == (size_t) -1) { switch(errno){ case EINVAL: return (size_t) -2; case EILSEQ: return (size_t) -1; case E2BIG: break; default: errno = EILSEQ; return (size_t) -1; } } buf[MB_CUR_MAX] = '\0'; /* safety measure */ strcpy(s, buf); return strlen(buf); }
void * Riconv_open (const char* tocode, const char* fromcode) { #if defined Win32 || __APPLE__ # ifdef Win32 const char *cp = "ASCII"; # ifndef SUPPORT_UTF8_WIN32 /* Always, at present */ char to[20] = ""; if (localeCP > 0) {snprintf(to, 20, "CP%d", localeCP); cp = to;} # endif # else /* __APPLE__ */ const char *cp = "UTF-8"; if (latin1locale) cp = "ISO-8859-1"; else if (!utf8locale) cp = locale2charset(NULL); # endif if (!*tocode && !*fromcode) return iconv_open(cp, cp); if(!*tocode) return iconv_open(cp, fromcode); else if(!*fromcode) return iconv_open(tocode, cp); else return iconv_open(tocode, fromcode); #else return iconv_open(tocode, fromcode); #endif }
main() { int i; i=0; setlocale(LC_CTYPE,""); DPRINT(guess_count); #ifndef Win32 SPRINT(locale2charset(NULL)); SPRINT(locale2charset("ja")); SPRINT(locale2charset("ja_JP")); SPRINT(locale2charset("ja_JP.eucJP")); SPRINT(locale2charset("ja_JP.ujis")); SPRINT(locale2charset("ja_JP.IBM-eucJP")); SPRINT(locale2charset("ja_JP.sjis")); SPRINT(locale2charset("ja_JP.IBM-932")); /* cannot encoding only zh */ SPRINT(locale2charset("zh""\0""BIG5")); SPRINT(locale2charset("zh_CN")); SPRINT(locale2charset("zh_CN.BIG5")); SPRINT(locale2charset("zh_TW")); SPRINT(locale2charset("zh_TW.eucTW")); SPRINT(locale2charset("zh_TW.big5")); SPRINT(locale2charset("zh_SG")); SPRINT(locale2charset("zh_HK")); SPRINT(locale2charset("ko")); SPRINT(locale2charset("en")); SPRINT(locale2charset("en_IE@euro")); SPRINT(locale2charset("en_IN")); SPRINT(locale2charset("C")); SPRINT(locale2charset("fran""\xe7""ais")); for(i=0;i<guess_count;i++){ locale2charset(guess[i].name); } #else SPRINT(locale2charset("japanese_JAPAN.932")); SPRINT(locale2charset("japanese_JAPAN.932")); #endif }