コード例 #1
0
ファイル: charconvert_osx.c プロジェクト: rellyons/Core-C
// wchar_t to wchar_t conversion
void CharConvWW(charconv* Conv, wchar_t* Out, size_t OutLen, const wchar_t* In)
{
	if (OutLen>0)
	{
        // assume wchar_t is 16 bits even if it's not true
        charconv_osx *CC = (charconv_osx *)Conv;
        if (CC)
        {
            CFStringRef TmpIn = CFStringCreateWithBytes(NULL, (const UInt8*)In, (utf16len((const uint16_t*)In)+1)*sizeof(uint16_t), CC->EncFrom, false);
            assert(TmpIn);
            CFIndex Read;
            CFRange		r;
            r.location = 0;
            r.length = CFStringGetLength(TmpIn);
            CFStringGetBytes(TmpIn, r, CC->EncTo,
                    LOSSY_CHAR, /* no lossy conversion */
                    0, /* not external representation */
                    (UInt8*)Out, OutLen, &Read);
            CFRelease(TmpIn);
            memset((UInt8*)Out+Read,0,sizeof(uint16_t));
        }
        else
        {
            fprintf(stderr, "Not supported yet: %s with no CC\n", __FUNCTION__);
        }
    }
}
コード例 #2
0
ファイル: charconvert_osx.c プロジェクト: rellyons/Core-C
// utf16_t to char conversion
void CharConvSU(charconv* Conv, char* Out, size_t OutLen, const utf16_t* In)
{
	if (OutLen>0)
	{
        // assume wchar_t is 16 bits even if it's not true
        CFStringEncoding EncFrom,EncTo;
        if (Conv)
        {
            EncFrom = ((charconv_osx *)Conv)->EncFrom;
            EncTo = ((charconv_osx *)Conv)->EncTo;
        }
        else
        {
            EncFrom = kCFStringEncodingUTF16;
            EncTo = kCFStringEncodingUTF8;
        }

        CFStringRef TmpIn = CFStringCreateWithBytes(NULL, (const UInt8*)In, (utf16len(In)+1)*sizeof(utf16_t), EncFrom, false);
        CFIndex Read;
        CFRange		r;
        r.location = 0;
        r.length = CFStringGetLength(TmpIn);
        CFStringGetBytes(TmpIn, r, EncTo,
                LOSSY_CHAR, /* no lossy conversion */
                0, /* not external representation */
                (UInt8*)Out, OutLen, &Read);
        CFRelease(TmpIn);
        Out[Read]=0;
	}
}
コード例 #3
0
void CharConvSU(charconv* CC, char* Out, size_t OutLen, const utf16_t* In)
{
    if (OutLen>0)
    {
        ICONV_CONST char* _In = (ICONV_CONST char*)In;
        size_t _InLen = utf16len(In)+1;
        char* _Out = Out;
        size_t _OutLen = OutLen;

        if (!CC || !_InLen || iconv((iconv_t)CC, &_In, &_InLen, &_Out, &_OutLen) == -1 || 
                    iconv((iconv_t)CC, NULL, NULL, &_Out, &_OutLen) == -1)
        {
            for (;OutLen>1 && *In;++In,--OutLen,++Out)
                *Out = (char)(*In>255?'*':*In);
            *Out = 0;	
            if (CC && _InLen) iconv((iconv_t)CC, NULL, NULL, NULL, NULL); // reset state
        }
        else
            *_Out=0;
    }
}
コード例 #4
0
ファイル: Platform.cpp プロジェクト: FieldDB/FieldWorks
utf16 *utf16ncpy(utf16 *dest, const utf16 *src, size_t n)
{
	memcpy(dest, src, sizeof(utf16) * std::min(utf16len(src, n), n));
	return dest;
}
コード例 #5
0
ファイル: Platform.cpp プロジェクト: FieldDB/FieldWorks
utf16 *utf16cpy(utf16 *dest, const utf16 *src)
{
	size_t srcsize = utf16len(src);
	memcpy(dest, src, sizeof(utf16) * srcsize);
	return dest;
}