From: Bruno Haible Date: Sun, 16 Sep 2018 12:42:55 +0000 (+0200) Subject: localename: Revisit macOS specific code. X-Git-Tag: v1.0~5421 X-Git-Url: https://gitweb.git.savannah.gnu.org/gitweb/?a=commitdiff_plain;h=c5804133baf074b65872dbdce2e9d6921bc5e504;p=gnulib.git localename: Revisit macOS specific code. * lib/localename.c (gl_locale_name_default): Reduce code duplication. Fix comments about Mac OS X versions. --- 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)