From: Bruno Haible Date: Sun, 9 May 2010 02:25:39 +0000 (+0200) Subject: localename: Port to MacOS X 10.6. X-Git-Tag: v0.18~15 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=3a2709cbf326836fbe8a2e44b7e560320a942c09;p=thirdparty%2Fgettext.git localename: Port to MacOS X 10.6. --- diff --git a/gettext-runtime/intl/ChangeLog b/gettext-runtime/intl/ChangeLog index 2a5df98c0..f204d787c 100644 --- a/gettext-runtime/intl/ChangeLog +++ b/gettext-runtime/intl/ChangeLog @@ -1,3 +1,10 @@ +2010-04-03 Bruno Haible + + localename: Port to MacOS X 10.6. + * localename.c (gl_locale_name_thread_unsafe): On MacOS X, try the + memory layout of the locales in MacOS X 10.6 as well. + Reported by Panu Kekäläinen . + 2010-05-08 Bruno Haible * config.charset: Update comments for Cygwin 1.7. diff --git a/gettext-runtime/intl/localename.c b/gettext-runtime/intl/localename.c index 5c4cae1ad..89a9692bb 100644 --- a/gettext-runtime/intl/localename.c +++ b/gettext-runtime/intl/localename.c @@ -2625,12 +2625,24 @@ gl_locale_name_thread_unsafe (int category, const char *categoryname) locale names of length > 31, we can assume that it is NUL terminated in this buffer. But we need to make a copy of the locale name, of indefinite extent. */ - struct _xlocale + struct _xlocale_part1_v0 /* used in MacOS X 10.5 */ { int32_t __refcount; void (*__free_extra)(void *); __darwin_mbstate_t __mbs[10]; int64_t __magic; + }; + struct _xlocale_part1_v1 /* used in MacOS X >= 10.6.0 */ + { + int32_t __refcount; + void (*__free_extra)(void *); + __darwin_mbstate_t __mbs[10]; + /*pthread_lock_t*/ int __lock; + int64_t __magic; + }; + struct _xlocale_part2 + { + int64_t __magic; unsigned char __collate_load_error; unsigned char __collate_substitute_nontrivial; unsigned char _messages_using_locale; @@ -2689,7 +2701,23 @@ gl_locale_name_thread_unsafe (int category, const char *categoryname) char *_time_locale_buf; /* more */ }; - struct _xlocale *tlp = (struct _xlocale *) thread_locale; + struct _xlocale_part2 *tlp; + if (((struct _xlocale_part1_v0 *) thread_locale)->__magic + == 0x786C6F63616C6530LL) + /* MacOS X 10.5 */ + tlp = + (struct _xlocale_part2 *) + &((struct _xlocale_part1_v0 *) thread_locale)->__magic; + else if (((struct _xlocale_part1_v1 *) thread_locale)->__magic + == 0x786C6F63616C6530LL) + /* MacOS X >= 10.6.0 */ + tlp = + (struct _xlocale_part2 *) + &((struct _xlocale_part1_v1 *) thread_locale)->__magic; + else + /* Unsupported version of MacOS X: The internals of 'struct _xlocale' + have changed again. */ + return ""; switch (category) { case LC_CTYPE: