[vlc-devel] [PATCH 3/7] text_renderer/freetype: Use FromCFString on darwin
Marvin Scholz
epirat07 at gmail.com
Mon Oct 8 10:55:59 CEST 2018
---
modules/text_renderer/freetype/fonts/darwin.c | 43 ++-----------------
1 file changed, 3 insertions(+), 40 deletions(-)
diff --git a/modules/text_renderer/freetype/fonts/darwin.c b/modules/text_renderer/freetype/fonts/darwin.c
index 47a011eed0..d0062621d3 100644
--- a/modules/text_renderer/freetype/fonts/darwin.c
+++ b/modules/text_renderer/freetype/fonts/darwin.c
@@ -33,6 +33,7 @@
#include <vlc_common.h>
#include <vlc_filter.h> /* filter_sys_t */
+#include <vlc_charset.h> /* FromCFString */
#include <CoreFoundation/CoreFoundation.h>
#include <CoreText/CoreText.h>
@@ -42,50 +43,12 @@
char* getPathForFontDescription(CTFontDescriptorRef fontDescriptor);
void addNewFontToFamily(filter_t *p_filter, CTFontDescriptorRef iter, char *path, vlc_family_t *family);
-/* Obtains a copy of the contents of a CFString in specified encoding.
- * Returns char* (must be freed by caller) or NULL on failure.
- */
-static char* CFStringCopyCString(CFStringRef cfString, CFStringEncoding cfStringEncoding)
-{
- // Try the quick way to obtain the buffer
- const char *tmpBuffer = CFStringGetCStringPtr(cfString, cfStringEncoding);
-
- if (tmpBuffer != NULL) {
- return strdup(tmpBuffer);
- }
-
- // The quick way did not work, try the long way
- CFIndex length = CFStringGetLength(cfString);
- CFIndex maxSize =
- CFStringGetMaximumSizeForEncoding(length, cfStringEncoding);
-
- // If result would exceed LONG_MAX, kCFNotFound is returned
- if (unlikely(maxSize == kCFNotFound)) {
- return NULL;
- }
-
- // Account for the null terminator
- maxSize++;
-
- char *buffer = (char *)malloc(maxSize);
-
- if (unlikely(buffer == NULL)) {
- return NULL;
- }
-
- // Copy CFString in requested encoding to buffer
- Boolean success = CFStringGetCString(cfString, buffer, maxSize, cfStringEncoding);
-
- if (!success)
- FREENULL(buffer);
- return buffer;
-}
char* getPathForFontDescription(CTFontDescriptorRef fontDescriptor)
{
CFURLRef url = CTFontDescriptorCopyAttribute(fontDescriptor, kCTFontURLAttribute);
CFStringRef path = CFURLCopyFileSystemPath(url, kCFURLPOSIXPathStyle);
- char *retPath = CFStringCopyCString(path, kCFStringEncodingUTF8);
+ char *retPath = FromCFString(path, kCFStringEncodingUTF8);
CFRelease(path);
CFRelease(url);
return retPath;
@@ -247,7 +210,7 @@ vlc_family_t *CoreText_GetFallbacks(filter_t *p_filter, const char *psz_family,
CFStringRef fallbackFontFamilyName = CTFontCopyFamilyName(fallbackFont);
/* create a new family object */
- char *psz_fallbackFamilyName = CFStringCopyCString(fallbackFontFamilyName, kCFStringEncodingUTF8);
+ char *psz_fallbackFamilyName = FromCFString(fallbackFontFamilyName, kCFStringEncodingUTF8);
if (psz_fallbackFamilyName == NULL) {
msg_Warn(p_filter, "Failed to convert font family name CFString to C string");
goto done;
--
2.19.1
More information about the vlc-devel
mailing list