[glib/glib-2-54] Revert "[MacOS] Fallback to CFStringGetCSTring if CFStringGetCStringPtr fails."



commit d74a69826ffc5591a7eeea61ca25f66f48fcf939
Author: John Ralls <jralls ceridwen us>
Date:   Wed Nov 1 18:00:49 2017 -0700

    Revert "[MacOS] Fallback to CFStringGetCSTring if CFStringGetCStringPtr fails."
    
    This reverts commit d5a9ce69c46a907af8ed3af0020d2a409faa3751.
    Partial resolution of bug 789894

 gio/gosxappinfo.c     |   34 ++--------------------------------
 gio/gosxcontenttype.c |   34 ++--------------------------------
 2 files changed, 4 insertions(+), 64 deletions(-)
---
diff --git a/gio/gosxappinfo.c b/gio/gosxappinfo.c
index 7c2b402..b24b6ff 100644
--- a/gio/gosxappinfo.c
+++ b/gio/gosxappinfo.c
@@ -175,44 +175,14 @@ static gchar *
 create_cstr_from_cfstring (CFStringRef str)
 {
   const gchar *cstr;
-  CFIndex length = CFStringGetLength (str);
-  char *buffer = NULL;
 
   if (str == NULL)
     return NULL;
 
   cstr = CFStringGetCStringPtr (str, kCFStringEncodingUTF8);
-  /* CFStringGetCStringPtr returns "NULL if the internal storage of
-   * theString does not allow [a pointer] to be returned efficiently".
-   * (Apple's docs don't say what that means). In that case we must
-   * use CFStringGetCString as a fallback.
-   */
-  if (cstr != NULL)
-    {
-        CFRelease (str);
-        return g_strdup (cstr);
-    }
-  
-  buffer = g_malloc0 (length + 1);
-  /* Start off with a buffer size sufficient for the most likely case
-   * that the CFString is ASCII so the UTF8 representation will be 1
-   * byte per code point. Keep trying up to 4 bytes per code point,
-   * the max allowed by RFC3629.
-   */
-  for (int i = 1; i <= 4; ++i)
-    {
-      if (CFStringGetCString (str, buffer, length, kCFStringEncodingUTF8))
-      {
-        CFRelease (str);
-        return buffer;
-      }
-      length += length;
-      buffer = g_realloc (buffer, length + 1);
-    }
-  
-  g_free (buffer);
   CFRelease (str);
-  return NULL;
+
+  return g_strdup (cstr);
 }
 
 static char *
diff --git a/gio/gosxcontenttype.c b/gio/gosxcontenttype.c
index c046d9e..485f5bf 100644
--- a/gio/gosxcontenttype.c
+++ b/gio/gosxcontenttype.c
@@ -53,44 +53,14 @@ static gchar *
 create_cstr_from_cfstring (CFStringRef str)
 {
   const gchar *cstr;
-  CFIndex length = CFStringGetLength (str);
-  char *buffer = NULL;
 
   if (str == NULL)
     return NULL;
 
   cstr = CFStringGetCStringPtr (str, kCFStringEncodingUTF8);
-  /* CFStringGetCStringPtr returns "NULL if the internal storage of
-   * theString does not allow [a pointer] to be returned efficiently".
-   * (Apple's docs don't say what that means). In that case we must
-   * use CFStringGetCString as a fallback.
-   */
-  if (cstr != NULL)
-    {
-        CFRelease (str);
-        return g_strdup (cstr);
-    }
-  
-  buffer = g_malloc0 (length + 1);
-  /* Start off with a buffer size sufficient for the most likely case
-   * that the CFString is ASCII so the UTF8 representation will be 1
-   * byte per code point. Keep trying up to 4 bytes per code point,
-   * the max allowed by RFC3629.
-   */
-  for (int i = 1; i <= 4; ++i)
-    {
-      if (CFStringGetCString (str, buffer, length, kCFStringEncodingUTF8))
-        {
-          CFRelease (str);
-          return buffer;
-        }
-      length += length;
-      buffer = g_realloc (buffer, length + 1);
-    }
-  
-  g_free (buffer);
   CFRelease (str);
-  return NULL;
+
+  return g_strdup (cstr);
 }
 
 /*< internal >


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]