[vlc-devel] [PATCH 03/41] Workaround for OS/2 iconv(), which 1. supports UCS-2 only not UTF-16 2. does not treat a string as a pathname by default
KO Myung-Hun
komh78 at gmail.com
Mon Oct 10 16:42:08 CEST 2011
Hi/2.
UCS-2 can handle BMP only on OS/2 as well.
Rémi Denis-Courmont wrote:
> Hello,
>
> Does UCS-2 iconv handle Unicode supplementary planes? At least, it does
> not on GNU/Linux.
>
> On Mon, 10 Oct 2011 20:43:42 +0900, KO Myung-Hun <komh at chollian.net>
> wrote:
>> ---
>> src/extras/libc.c | 44 ++++++++++++++++++++++++++++++++++++++++++++
>> 1 files changed, 44 insertions(+), 0 deletions(-)
>>
>> diff --git a/src/extras/libc.c b/src/extras/libc.c
>> index 5004480..6a0295e 100644
>> --- a/src/extras/libc.c
>> +++ b/src/extras/libc.c
>> @@ -43,6 +43,15 @@
>> # include <iconv.h>
>> #endif
>>
>> +#ifdef __OS2__
>> +# include <uconv.h>
>> +
>> +typedef struct os2_iconv_t
>> +{
>> + UconvObject from;
>> +} os2_iconv_t;
>> +#endif
>> +
>>
> /*****************************************************************************
>> * Local conversion routine from ISO_6937 to UTF-8 charset. Support for
>> this
>> * is still missing in libiconv, hence multiple operating systems lack
> it.
>> @@ -332,7 +341,42 @@ vlc_iconv_t vlc_iconv_open( const char *tocode,
> const
>> char *fromcode )
>> return (vlc_iconv_t)(-2);
>> #endif
>> #if defined(HAVE_ICONV)
>> +# if defined(__OS2__) && defined(__INNOTEK_LIBC__)
>> + char tocode_ucs2[] = "UCS-2LE";
>> + char fromcode_ucs2[] = "UCS-2LE";
>> + os2_iconv_t *p_os2_iconv;
>> +
>> + /* Workaround for UTF-16 because OS/2 supports UCS-2 only not
> UTF-16
>> */
>> + if( !strncmp( tocode, "UTF-16", 5 ))
>> + {
>> + strncpy( tocode_ucs2 + 5, tocode + 6, 2 );
>> + tocode = tocode_ucs2;
>> + }
>> +
>> + if( !strncmp( fromcode, "UTF-16", 5 ))
>> + {
>> + strncpy( fromcode_ucs2 + 5, fromcode + 6, 2 );
>> + fromcode = fromcode_ucs2;
>> + }
>> +
>> + p_os2_iconv = ( os2_iconv_t * )iconv_open( tocode, fromcode );
>> +
>> + if( p_os2_iconv != ( iconv_t )(-1))
>> + {
>> + /* Assume strings contain pathnames */
>> + uconv_attribute_t attr;
>> +
>> + UniQueryUconvObject( p_os2_iconv->from, &attr,
>> + sizeof( uconv_attribute_t ),
>> + NULL, NULL, NULL );
>> + attr.converttype |= CVTTYPE_PATH;
>> + UniSetUconvObject( p_os2_iconv->from, &attr );
>> + }
>> +
>> + return ( vlc_iconv_t )p_os2_iconv;
>> +# else
>> return iconv_open( tocode, fromcode );
>> +# endif
>> #else
>> return (vlc_iconv_t)(-1);
>> #endif
>
--
KO Myung-Hun
Using Mozilla SeaMonkey 2.0.14
Under OS/2 Warp 4 for Korean with FixPak #15
On AMD ThunderBird 1GHz with 512 MB RAM
Korean OS/2 User Community : http://www.ecomstation.co.kr
More information about the vlc-devel
mailing list