]> git.saurik.com Git - apple/javascriptcore.git/blobdiff - wtf/unicode/icu/CollatorICU.cpp
JavaScriptCore-576.tar.gz
[apple/javascriptcore.git] / wtf / unicode / icu / CollatorICU.cpp
index 79dec79d24a249b9039d74046ed509ec09480130..a1753a4c096f0502aed3cc75c4c2290dffed6fc0 100644 (file)
@@ -36,7 +36,8 @@
 #include <unicode/ucol.h>
 #include <string.h>
 
-#if PLATFORM(DARWIN)
+#if OS(DARWIN)
+#include "RetainPtr.h"
 #include <CoreFoundation/CoreFoundation.h>
 #endif
 
@@ -58,13 +59,18 @@ Collator::Collator(const char* locale)
 
 std::auto_ptr<Collator> Collator::userDefault()
 {
-#if PLATFORM(DARWIN) && PLATFORM(CF)
+#if OS(DARWIN) && PLATFORM(CF)
     // Mac OS X doesn't set UNIX locale to match user-selected one, so ICU default doesn't work.
-    CFStringRef collationOrder = (CFStringRef)CFPreferencesCopyValue(CFSTR("AppleCollationOrder"), kCFPreferencesAnyApplication, kCFPreferencesCurrentUser, kCFPreferencesAnyHost);
+#if !defined(BUILDING_ON_TIGER) && !defined(BUILDING_ON_LEOPARD) && !OS(IPHONE_OS)
+    RetainPtr<CFLocaleRef> currentLocale(AdoptCF, CFLocaleCopyCurrent());
+    CFStringRef collationOrder = (CFStringRef)CFLocaleGetValue(currentLocale.get(), kCFLocaleCollatorIdentifier);
+#else
+    RetainPtr<CFStringRef> collationOrderRetainer(AdoptCF, (CFStringRef)CFPreferencesCopyValue(CFSTR("AppleCollationOrder"), kCFPreferencesAnyApplication, kCFPreferencesCurrentUser, kCFPreferencesAnyHost));
+    CFStringRef collationOrder = collationOrderRetainer.get();
+#endif
     char buf[256];
     if (collationOrder) {
         CFStringGetCString(collationOrder, buf, sizeof(buf), kCFStringEncodingASCII);
-        CFRelease(collationOrder);
         return std::auto_ptr<Collator>(new Collator(buf));
     } else
         return std::auto_ptr<Collator>(new Collator(""));