Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(881)

Unified Diff: patches/ios_timezone.patch

Issue 10692124: Fix ICU time zone support on iOS (Closed) Base URL: http://src.chromium.org/svn/trunk/deps/third_party/icu46
Patch Set: Added another bug ref Created 8 years, 5 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « README.chromium ('k') | public/common/unicode/pmac.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: patches/ios_timezone.patch
diff --git a/patches/ios_timezone.patch b/patches/ios_timezone.patch
new file mode 100644
index 0000000000000000000000000000000000000000..b2ebbde7ea09a1c4e8e580e964134135b1e90eab
--- /dev/null
+++ b/patches/ios_timezone.patch
@@ -0,0 +1,76 @@
+--- public/common/unicode/pmac.h
++++ public/common/unicode/pmac.h
+@@ -50,6 +50,16 @@
+ #endif
+
+ #include <AvailabilityMacros.h>
++#include <TargetConditionals.h>
++
++/**
++ * Add a second platform define to handle differences between Mac OS X and iOS
++ */
++#if TARGET_OS_IPHONE
++#ifndef U_IOS
++#define U_IOS
++#endif
++#endif
+
+ /**
+ * \def U_HAVE_DIRENT_H
+@@ -288,11 +299,16 @@
+ #if 1
+ #define U_TZSET tzset
+ #endif
++#ifndef U_IOS
++/* The iOS version of timezone is busted (at least in the simulator, it is
++ never set to anything useful). Leave it undefined to avoid a code path
++ in putil.c. */
+ #if MAC_OS_X_VERSION_MIN_REQUIRED < MAC_OS_X_VERSION_10_5
+ #define U_TIMEZONE 0
+ #else
+ #define U_TIMEZONE timezone
+ #endif
++#endif // !U_IOS
+ #if 1
+ #define U_TZNAME tzname
+ #endif
+--- source/common/putil.c
++++ source/common/putil.c
+@@ -623,20 +623,28 @@ uprv_timezone()
+ #else
+ time_t t, t1, t2;
+ struct tm tmrec;
++#ifndef U_IOS
+ UBool dst_checked;
++#endif
+ int32_t tdiff = 0;
+
+ time(&t);
+ uprv_memcpy( &tmrec, localtime(&t), sizeof(tmrec) );
++#ifndef U_IOS
+ dst_checked = (tmrec.tm_isdst != 0); /* daylight savings time is checked*/
++#endif
+ t1 = mktime(&tmrec); /* local time in seconds*/
+ uprv_memcpy( &tmrec, gmtime(&t), sizeof(tmrec) );
+ t2 = mktime(&tmrec); /* GMT (or UTC) in seconds*/
+ tdiff = t2 - t1;
++#ifndef U_IOS
++ /* On iOS the calculated tdiff is correct so and doesn't need this dst
++ shift applied. */
+ /* imitate NT behaviour, which returns same timezone offset to GMT for
+ winter and summer*/
+ if (dst_checked)
+ tdiff += 3600;
++#endif
+ return tdiff;
+ #endif
+ }
+@@ -649,7 +661,7 @@ uprv_timezone()
+ extern U_IMPORT char *U_TZNAME[];
+ #endif
+
+-#if !UCONFIG_NO_FILE_IO && (defined(U_DARWIN) || defined(U_LINUX) || defined(U_BSD))
++#if !UCONFIG_NO_FILE_IO && ((defined(U_DARWIN) && !defined(U_IOS)) || defined(U_LINUX) || defined(U_BSD))
+ /* These platforms are likely to use Olson timezone IDs. */
+ #define CHECK_LOCALTIME_LINK 1
+ #if defined(U_DARWIN)
« no previous file with comments | « README.chromium ('k') | public/common/unicode/pmac.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698