Skip to content

Conversation

tobil4sk
Copy link
Member

d119a07 fixed an issue with incorrect handling of length < 0, however, it also introduced an unnecessary additional loop to get the length of the string, separate from the conversion/copy loop. This can be cleaned up because GCStringDup already has the correct handling of length < 0, and for TConvertToUTF8 putting length as 0 has the same effect. This way the string only has to be iterated through once for the conversion/copy.

Also, there was still broken behaviour when using String::create(_, 0). With HX_SMART_STRINGS, this always returns an empty string, whereas without HX_SMART_STRINGS the behaviour depends on the char type. This PR fixes this so it always returns an empty string.

This also adds a test for #849, to make sure it doesn't cause a regression. (Presumably, #814 is also covered by this test)

TConvertToUTF8 treats strings as null terminating if the length is 0, so
rather than calculating the size manually we can set it to 0 if it the
input to TCopyString is -1.

For GCStringDup, -1 is handled as null terminating, but 0 is treated as
a 0 length string. We can pass the length argument straight in without
modification there.

This avoids duplicate loops in both the TConvertToUTF8 and GCStringDup
cases.
When smart strings are enabled, this always returns an empty string,
however, if they are disabled this currently has different behaviour
depending on the type of character passed in.

This fixes the behaviour so that it also returns an empty string for
wchar_t and char16_t strings when smart strings are disabled.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

1 participant