REF:https://bugzilla.tianocore.org/show_bug.cgi?id=1262
Current implementation of BaseLib APIs:
AsciiStrToUnicodeStr()
AsciiStrToUnicodeStrS()
AsciiStrnToUnicodeStrS()
do not handle EASCII properly.
More specifically, if the value of ASCII character is larger than 0x7F,
then the converted Unicode character will have all '1's in the higher 8
bits.
An example:
0xC9 => 0xFFC9 (current implementations)
and it should be:
0xC9 => 0x00C9
This commit will address this issue.
Cc: Bin.Lain <bin_601@mail2000.com.tw>
Cc: Jiewen Yao <jiewen.yao@intel.com>
Cc: Michael D Kinney <michael.d.kinney@intel.com>
Contributed-under: TianoCore Contribution Agreement 1.1
Signed-off-by: Hao Wu <hao.a.wu@intel.com>
Reviewed-by: Liming Gao <liming.gao@intel.com>
// Convert string\r
//\r
while (*Source != '\0') {\r
- *(Destination++) = (CHAR16)*(Source++);\r
+ *(Destination++) = (CHAR16)(UINT8)*(Source++);\r
}\r
*Destination = '\0';\r
\r
// Convert string\r
//\r
while ((*Source != 0) && (SourceLen > 0)) {\r
- *(Destination++) = (CHAR16)*(Source++);\r
+ *(Destination++) = (CHAR16)(UINT8)*(Source++);\r
SourceLen--;\r
(*DestinationLength)++;\r
}\r
\r
ReturnValue = Destination;\r
while (*Source != '\0') {\r
- *(Destination++) = (CHAR16) *(Source++);\r
+ *(Destination++) = (CHAR16)(UINT8) *(Source++);\r
}\r
//\r
// End the Destination with a NULL.\r