static XlcConv create_ucstocs_conv( XLCd lcd, XlcConvMethods methods) { if (XLC_PUBLIC_PART(lcd)->codeset && _XlcCompareISOLatin1(XLC_PUBLIC_PART(lcd)->codeset, "UTF-8") == 0) { XlcConv conv; Utf8Conv *preferred; lazy_init_all_charsets(); conv = (XlcConv) Xmalloc(sizeof(XlcConvRec) + 2 * sizeof(Utf8Conv)); if (conv == (XlcConv) NULL) return (XlcConv) NULL; preferred = (Utf8Conv *) ((char *) conv + sizeof(XlcConvRec)); preferred[0] = &all_charsets[0]; /* ISO10646 */ preferred[1] = (Utf8Conv) NULL; conv->methods = methods; conv->state = (XPointer) preferred; return conv; } else { return create_tocs_conv(lcd, methods); } }
XLCd _XlcUtf8Loader( const char *name) { XLCd lcd; lcd = _XlcCreateLC(name, _XlcGenericMethods); if (lcd == (XLCd) NULL) return lcd; /* The official IANA name for UTF-8 is "UTF-8" in upper case with a dash. */ if (!XLC_PUBLIC_PART(lcd)->codeset || (_XlcCompareISOLatin1(XLC_PUBLIC_PART(lcd)->codeset, "UTF-8"))) { _XlcDestroyLC(lcd); return (XLCd) NULL; } _XlcAddUtf8LocaleConverters(lcd); _XlcAddUtf8Converters(lcd); return lcd; }