From c5804133baf074b65872dbdce2e9d6921bc5e504 Mon Sep 17 00:00:00 2001 From: Bruno Haible Date: Sun, 16 Sep 2018 14:42:55 +0200 Subject: [PATCH] localename: Revisit macOS specific code. * lib/localename.c (gl_locale_name_default): Reduce code duplication. Fix comments about Mac OS X versions. --- ChangeLog | 6 ++++++ lib/localename.c | 39 +++++++++++++++++++-------------------- 2 files changed, 25 insertions(+), 20 deletions(-) diff --git a/ChangeLog b/ChangeLog index c6006d65e0..ba07d9d63a 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,9 @@ +2018-09-16 Bruno Haible + + localename: Revisit macOS specific code. + * lib/localename.c (gl_locale_name_default): Reduce code duplication. + Fix comments about Mac OS X versions. + 2018-09-15 Bruno Haible setlocale: Improve support for locales not supported by libc. diff --git a/lib/localename.c b/lib/localename.c index c9415c9849..34e10b43cf 100644 --- a/lib/localename.c +++ b/lib/localename.c @@ -1143,7 +1143,7 @@ extern char * getlocalename_l(int, locale_t); #if HAVE_CFLOCALECOPYCURRENT || HAVE_CFPREFERENCESCOPYAPPVALUE -/* Mac OS X 10.2 or newer */ +/* Mac OS X 10.4 or newer */ /* Canonicalize a Mac OS X locale name to a Unix locale name. NAME is a sufficiently large buffer. @@ -2932,7 +2932,7 @@ gl_locale_name_default (void) codeset. */ # if HAVE_CFLOCALECOPYCURRENT || HAVE_CFPREFERENCESCOPYAPPVALUE - /* Mac OS X 10.2 or newer */ + /* Mac OS X 10.4 or newer */ { /* Cache the locale name, since CoreFoundation calls are expensive. */ static const char *cached_localename; @@ -2940,29 +2940,28 @@ gl_locale_name_default (void) if (cached_localename == NULL) { char namebuf[256]; -# if HAVE_CFLOCALECOPYCURRENT /* Mac OS X 10.3 or newer */ +# if HAVE_CFLOCALECOPYCURRENT /* Mac OS X 10.5 or newer */ CFLocaleRef locale = CFLocaleCopyCurrent (); CFStringRef name = CFLocaleGetIdentifier (locale); - - if (CFStringGetCString (name, namebuf, sizeof (namebuf), - kCFStringEncodingASCII)) - { - gl_locale_name_canonicalize (namebuf); - cached_localename = strdup (namebuf); - } - CFRelease (locale); -# elif HAVE_CFPREFERENCESCOPYAPPVALUE /* Mac OS X 10.2 or newer */ +# elif HAVE_CFPREFERENCESCOPYAPPVALUE /* Mac OS X 10.4 or newer */ CFTypeRef value = CFPreferencesCopyAppValue (CFSTR ("AppleLocale"), kCFPreferencesCurrentApplication); - if (value != NULL - && CFGetTypeID (value) == CFStringGetTypeID () - && CFStringGetCString ((CFStringRef)value, - namebuf, sizeof (namebuf), - kCFStringEncodingASCII)) - { - gl_locale_name_canonicalize (namebuf); - cached_localename = strdup (namebuf); + if (value != NULL && CFGetTypeID (value) == CFStringGetTypeID ()) + { + CFStringRef name = (CFStringRef)value; +# endif + + if (CFStringGetCString (name, namebuf, sizeof (namebuf), + kCFStringEncodingASCII)) + { + gl_locale_name_canonicalize (namebuf); + cached_localename = strdup (namebuf); + } + +# if HAVE_CFLOCALECOPYCURRENT /* Mac OS X 10.5 or newer */ + CFRelease (locale); +# elif HAVE_CFPREFERENCESCOPYAPPVALUE /* Mac OS X 10.4 or newer */ } # endif if (cached_localename == NULL) -- 2.39.5