| 1715 | { |
| 1716 | |
| 1717 | wchar_t *ConvertToWChar(const char *inStr, int *ioLen) |
| 1718 | { |
| 1719 | int len = ioLen ? *ioLen : strlen(inStr); |
| 1720 | |
| 1721 | wchar_t *result = (wchar_t *)NewGCPrivate(0,sizeof(wchar_t)*(len+1)); |
| 1722 | int l = 0; |
| 1723 | |
| 1724 | unsigned char *b = (unsigned char *)inStr; |
| 1725 | for(int i=0;i<len;) |
| 1726 | { |
| 1727 | int c = b[i++]; |
| 1728 | if (c==0) break; |
| 1729 | else if( c < 0x80 ) |
| 1730 | { |
| 1731 | result[l++] = c; |
| 1732 | } |
| 1733 | else if( c < 0xE0 ) |
| 1734 | result[l++] = ( ((c & 0x3F) << 6) | (b[i++] & 0x7F) ); |
| 1735 | else if( c < 0xF0 ) |
| 1736 | { |
| 1737 | int c2 = b[i++]; |
| 1738 | result[l++] = ( ((c & 0x1F) << 12) | ((c2 & 0x7F) << 6) | ( b[i++] & 0x7F) ); |
| 1739 | } |
| 1740 | else |
| 1741 | { |
| 1742 | int c2 = b[i++]; |
| 1743 | int c3 = b[i++]; |
| 1744 | result[l++] = ( ((c & 0x0F) << 18) | ((c2 & 0x7F) << 12) | ((c3 << 6) & 0x7F) | (b[i++] & 0x7F) ); |
| 1745 | } |
| 1746 | } |
| 1747 | result[l] = '\0'; |
| 1748 | if (ioLen) |
| 1749 | *ioLen = l; |
| 1750 | return result; |
| 1751 | } |
| 1752 | |
| 1753 | |
| 1754 |
nothing calls this directly
no test coverage detected