From a5de7d83c2b2c8c3ab4993482a66fe32e7d2c67f Mon Sep 17 00:00:00 2001 From: Joshua Granick Date: Thu, 14 Mar 2019 16:25:38 -0700 Subject: [PATCH] String fixes --- project/src/ExternalInterface.cpp | 7 ++++++- project/src/graphics/cairo/CairoBindings.cpp | 1 - project/src/media/openal/OpenALBindings.cpp | 2 -- project/src/net/curl/CURLBindings.cpp | 3 --- project/src/text/Font.cpp | 21 +++++++++++++++++-- .../src/text/harfbuzz/HarfbuzzBindings.cpp | 4 ---- src/lime/text/Font.hx | 2 +- 7 files changed, 26 insertions(+), 14 deletions(-) diff --git a/project/src/ExternalInterface.cpp b/project/src/ExternalInterface.cpp index 37adee6c0..6e9ac14e0 100644 --- a/project/src/ExternalInterface.cpp +++ b/project/src/ExternalInterface.cpp @@ -1109,7 +1109,12 @@ namespace lime { #ifdef LIME_FREETYPE Font *font = (Font*)fontHandle->ptr; wchar_t *name = font->GetFamilyName (); - return (vbyte*)name; + int size = std::wcslen (name); + char* result = (char*)malloc (size + 1); + std::wcstombs (result, name, size); + result[size] = '\0'; + delete name; + return (vbyte*)result; #else return 0; #endif diff --git a/project/src/graphics/cairo/CairoBindings.cpp b/project/src/graphics/cairo/CairoBindings.cpp index 1de8fcffc..68203a9d3 100644 --- a/project/src/graphics/cairo/CairoBindings.cpp +++ b/project/src/graphics/cairo/CairoBindings.cpp @@ -2272,7 +2272,6 @@ namespace lime { int length = strlen (version); char* _version = (char*)malloc (length + 1); strcpy (_version, version); - _version[length] = '\0'; return (vbyte*)_version; } diff --git a/project/src/media/openal/OpenALBindings.cpp b/project/src/media/openal/OpenALBindings.cpp index b9822ac70..f2f5bbd24 100644 --- a/project/src/media/openal/OpenALBindings.cpp +++ b/project/src/media/openal/OpenALBindings.cpp @@ -2207,7 +2207,6 @@ namespace lime { int length = strlen (result); char* _result = (char*)malloc (length + 1); strcpy (_result, result); - _result[length] = '\0'; return (vbyte*)_result; } @@ -3389,7 +3388,6 @@ namespace lime { int length = strlen (result); char* _result = (char*)malloc (length + 1); strcpy (_result, result); - _result[length] = '\0'; return (vbyte*)_result; } diff --git a/project/src/net/curl/CURLBindings.cpp b/project/src/net/curl/CURLBindings.cpp index c3c2d667c..5b6b7d394 100644 --- a/project/src/net/curl/CURLBindings.cpp +++ b/project/src/net/curl/CURLBindings.cpp @@ -2191,7 +2191,6 @@ namespace lime { int length = strlen (result); char* _result = (char*)malloc (length + 1); strcpy (_result, result); - _result[length] = '\0'; return (vbyte*)_result; } @@ -2211,7 +2210,6 @@ namespace lime { int length = strlen (result); char* _result = (char*)malloc (length + 1); strcpy (_result, result); - _result[length] = '\0'; return (vbyte*)_result; } @@ -2762,7 +2760,6 @@ namespace lime { int length = strlen (result); char* _result = (char*)malloc (length + 1); strcpy (_result, result); - _result[length] = '\0'; return (vbyte*)_result; } diff --git a/project/src/text/Font.cpp b/project/src/text/Font.cpp index 5ba96e72f..2720cd915 100644 --- a/project/src/text/Font.cpp +++ b/project/src/text/Font.cpp @@ -622,11 +622,28 @@ namespace lime { hl_dyn_seti (ret, hl_hash_utf8 ("is_bold"), &hlt_bool, ((FT_Face)face)->style_flags & FT_STYLE_FLAG_BOLD); hl_dyn_seti (ret, hl_hash_utf8 ("num_glyphs"), &hlt_i32, num_glyphs); - // TODO: if family_name is null, convert to wide string + char* _family_name = NULL; + + if (family_name != NULL) { + + int length = std::wcslen (family_name); + char* result = (char*)malloc (length + 1); + std::wcstombs (result, family_name, length); + result[length] = '\0'; + delete family_name; + + } else { + + int length = strlen (((FT_Face)face)->family_name); + _family_name = (char*)malloc (length + 1); + strcpy (_family_name, ((FT_Face)face)->family_name); + + } + char* style_name = (char*)malloc(strlen(((FT_Face)face)->style_name) + 1); strcpy(style_name, ((FT_Face)face)->style_name); - hl_dyn_setp (ret, hl_hash_utf8 ("family_name"), &hlt_bytes, family_name); + hl_dyn_setp (ret, hl_hash_utf8 ("family_name"), &hlt_bytes, _family_name); hl_dyn_setp (ret, hl_hash_utf8 ("style_name"), &hlt_bytes, style_name); hl_dyn_seti (ret, hl_hash_utf8 ("em_size"), &hlt_i32, ((FT_Face)face)->units_per_EM); hl_dyn_seti (ret, hl_hash_utf8 ("ascend"), &hlt_i32, ((FT_Face)face)->ascender); diff --git a/project/src/text/harfbuzz/HarfbuzzBindings.cpp b/project/src/text/harfbuzz/HarfbuzzBindings.cpp index 68cd1f3e4..dfdde0cf6 100644 --- a/project/src/text/harfbuzz/HarfbuzzBindings.cpp +++ b/project/src/text/harfbuzz/HarfbuzzBindings.cpp @@ -727,7 +727,6 @@ namespace lime { int length = strlen (result); char* _result = (char*)malloc (length + 1); strcpy (_result, result); - _result[length] = '\0'; return (vbyte*)_result; } @@ -1149,7 +1148,6 @@ namespace lime { int length = strlen (result); char* _result = (char*)malloc (length + 1); strcpy (_result, result); - _result[length] = '\0'; return (vbyte*)_result; } @@ -1419,7 +1417,6 @@ namespace lime { int length = strlen (result); char* _result = (char*)malloc (length + 1); strcpy (_result, result); - _result[length] = '\0'; return (vbyte*)_result; } @@ -1608,7 +1605,6 @@ namespace lime { int length = strlen (result); char* _result = (char*)malloc (length + 1); strcpy (_result, result); - _result[length] = '\0'; return (vbyte*)_result; } diff --git a/src/lime/text/Font.hx b/src/lime/text/Font.hx index f417c4276..9dc7efc2d 100644 --- a/src/lime/text/Font.hx +++ b/src/lime/text/Font.hx @@ -472,7 +472,7 @@ class Font if (name == null) { #if hl - name = @:privateAccess String.fromUCS2(NativeCFFI.lime_font_get_family_name(src)); + name = @:privateAccess String.fromUTF8(NativeCFFI.lime_font_get_family_name(src)); #else name = cast NativeCFFI.lime_font_get_family_name(src); #end