mirror of
https://github.com/reactos/reactos.git
synced 2025-06-12 05:28:28 +00:00
[UNICODE] Sync with Wine Staging 4.18. CORE-16441
This commit is contained in:
parent
3cfeed64b1
commit
1a472d9453
84 changed files with 1111 additions and 1845 deletions
|
@ -22,7 +22,7 @@
|
|||
|
||||
#include "wine/unicode.h"
|
||||
|
||||
extern unsigned int wine_decompose( WCHAR ch, WCHAR *dst, unsigned int dstlen ) DECLSPEC_HIDDEN;
|
||||
extern unsigned int wine_decompose( int flags, WCHAR ch, WCHAR *dst, unsigned int dstlen ) DECLSPEC_HIDDEN;
|
||||
|
||||
/* check the code whether it is in Unicode Private Use Area (PUA). */
|
||||
/* MB_ERR_INVALID_CHARS raises an error converting from 1-byte character to PUA. */
|
||||
|
@ -65,34 +65,52 @@ static inline int mbstowcs_sbcs( const struct sbcs_table *table, int flags,
|
|||
ret = -1;
|
||||
}
|
||||
|
||||
for (;;)
|
||||
while (srclen >= 16)
|
||||
{
|
||||
switch(srclen)
|
||||
{
|
||||
default:
|
||||
case 16: dst[15] = cp2uni[src[15]];
|
||||
case 15: dst[14] = cp2uni[src[14]];
|
||||
case 14: dst[13] = cp2uni[src[13]];
|
||||
case 13: dst[12] = cp2uni[src[12]];
|
||||
case 12: dst[11] = cp2uni[src[11]];
|
||||
case 11: dst[10] = cp2uni[src[10]];
|
||||
case 10: dst[9] = cp2uni[src[9]];
|
||||
case 9: dst[8] = cp2uni[src[8]];
|
||||
case 8: dst[7] = cp2uni[src[7]];
|
||||
case 7: dst[6] = cp2uni[src[6]];
|
||||
case 6: dst[5] = cp2uni[src[5]];
|
||||
case 5: dst[4] = cp2uni[src[4]];
|
||||
case 4: dst[3] = cp2uni[src[3]];
|
||||
case 3: dst[2] = cp2uni[src[2]];
|
||||
case 2: dst[1] = cp2uni[src[1]];
|
||||
case 1: dst[0] = cp2uni[src[0]];
|
||||
case 0: break;
|
||||
}
|
||||
if (srclen < 16) return ret;
|
||||
dst += 16;
|
||||
dst[0] = cp2uni[src[0]];
|
||||
dst[1] = cp2uni[src[1]];
|
||||
dst[2] = cp2uni[src[2]];
|
||||
dst[3] = cp2uni[src[3]];
|
||||
dst[4] = cp2uni[src[4]];
|
||||
dst[5] = cp2uni[src[5]];
|
||||
dst[6] = cp2uni[src[6]];
|
||||
dst[7] = cp2uni[src[7]];
|
||||
dst[8] = cp2uni[src[8]];
|
||||
dst[9] = cp2uni[src[9]];
|
||||
dst[10] = cp2uni[src[10]];
|
||||
dst[11] = cp2uni[src[11]];
|
||||
dst[12] = cp2uni[src[12]];
|
||||
dst[13] = cp2uni[src[13]];
|
||||
dst[14] = cp2uni[src[14]];
|
||||
dst[15] = cp2uni[src[15]];
|
||||
src += 16;
|
||||
dst += 16;
|
||||
srclen -= 16;
|
||||
}
|
||||
|
||||
/* now handle the remaining characters */
|
||||
src += srclen;
|
||||
dst += srclen;
|
||||
switch (srclen)
|
||||
{
|
||||
case 15: dst[-15] = cp2uni[src[-15]];
|
||||
case 14: dst[-14] = cp2uni[src[-14]];
|
||||
case 13: dst[-13] = cp2uni[src[-13]];
|
||||
case 12: dst[-12] = cp2uni[src[-12]];
|
||||
case 11: dst[-11] = cp2uni[src[-11]];
|
||||
case 10: dst[-10] = cp2uni[src[-10]];
|
||||
case 9: dst[-9] = cp2uni[src[-9]];
|
||||
case 8: dst[-8] = cp2uni[src[-8]];
|
||||
case 7: dst[-7] = cp2uni[src[-7]];
|
||||
case 6: dst[-6] = cp2uni[src[-6]];
|
||||
case 5: dst[-5] = cp2uni[src[-5]];
|
||||
case 4: dst[-4] = cp2uni[src[-4]];
|
||||
case 3: dst[-3] = cp2uni[src[-3]];
|
||||
case 2: dst[-2] = cp2uni[src[-2]];
|
||||
case 1: dst[-1] = cp2uni[src[-1]];
|
||||
case 0: break;
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
|
||||
/* mbstowcs for single-byte code page with char decomposition */
|
||||
|
@ -107,13 +125,13 @@ static int mbstowcs_sbcs_decompose( const struct sbcs_table *table, int flags,
|
|||
{
|
||||
WCHAR dummy[4]; /* no decomposition is larger than 4 chars */
|
||||
for (len = 0; srclen; srclen--, src++)
|
||||
len += wine_decompose( cp2uni[*src], dummy, 4 );
|
||||
len += wine_decompose( 0, cp2uni[*src], dummy, 4 );
|
||||
return len;
|
||||
}
|
||||
|
||||
for (len = dstlen; srclen && len; srclen--, src++)
|
||||
{
|
||||
unsigned int res = wine_decompose( cp2uni[*src], dst, len );
|
||||
unsigned int res = wine_decompose( 0, cp2uni[*src], dst, len );
|
||||
if (!res) break;
|
||||
len -= res;
|
||||
dst += res;
|
||||
|
@ -219,7 +237,7 @@ static int mbstowcs_dbcs_decompose( const struct dbcs_table *table,
|
|||
ch = cp2uni[(off << 8) + *src];
|
||||
}
|
||||
else ch = cp2uni[*src];
|
||||
len += wine_decompose( ch, dummy, 4 );
|
||||
len += wine_decompose( 0, ch, dummy, 4 );
|
||||
}
|
||||
return len;
|
||||
}
|
||||
|
@ -234,7 +252,7 @@ static int mbstowcs_dbcs_decompose( const struct dbcs_table *table,
|
|||
ch = cp2uni[(off << 8) + *src];
|
||||
}
|
||||
else ch = cp2uni[*src];
|
||||
if (!(res = wine_decompose( ch, dst, len ))) break;
|
||||
if (!(res = wine_decompose( 0, ch, dst, len ))) break;
|
||||
dst += res;
|
||||
len -= res;
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue