From 1988466762b4df32cf65eb7b31680fb95fa07aef Mon Sep 17 00:00:00 2001 From: Martin Pulec Date: Fri, 25 Nov 2016 11:41:13 +0100 Subject: [PATCH] DeckLink: improved string handling --- src/blackmagic_common.cpp | 20 ++++++++++++-------- 1 file changed, 12 insertions(+), 8 deletions(-) diff --git a/src/blackmagic_common.cpp b/src/blackmagic_common.cpp index 012cb542e..01427bfb9 100644 --- a/src/blackmagic_common.cpp +++ b/src/blackmagic_common.cpp @@ -78,26 +78,30 @@ string bmd_hresult_to_string(HRESULT res) */ const char *get_cstr_from_bmd_api_str(BMD_STR bmd_string) { - const char *cstr; + const char *cstr; #ifdef HAVE_MACOSX - cstr = (char *) malloc(128); - CFStringGetCString(bmd_string, (char *) cstr, 128, kCFStringEncodingMacRoman); + size_t len = CFStringGetMaximumSizeForEncoding(CFStringGetLength(bmd_string), kCFStringEncodingUTF8) + 1; + cstr = (char *) malloc(len); + CFStringGetCString(bmd_string, (char *) cstr, len, kCFStringEncodingUTF8); #elif defined WIN32 - cstr = (char *) malloc(128); - wcstombs((char *) cstr, bmd_string, 128); + size_t len = SysStringLen(bmd_string) * 4 + 1; + cstr = (char *) malloc(len); + wcstombs((char *) cstr, bmd_string, len); #else // Linux - cstr = bmd_string; + cstr = strdup(bmd_string); #endif - return cstr; + return cstr; } void release_bmd_api_str(BMD_STR string) { #ifdef HAVE_MACOSX CFRelease(string); +#elif defined WIN32 + SysFreeString(string); #else - UNUSED(string); + free((void *) string); #endif }