1 --- public/common/unicode/pmac.h 2 +++ public/common/unicode/pmac.h 3 @@ -50,6 +50,16 @@ 4 #endif 5 6 #include <AvailabilityMacros.h> 7 +#include <TargetConditionals.h> 8 + 9 +/** 10 + * Add a second platform define to handle differences between Mac OS X and iOS 11 + */ 12 +#if TARGET_OS_IPHONE 13 +#ifndef U_IOS 14 +#define U_IOS 15 +#endif 16 +#endif 17 18 /** 19 * \def U_HAVE_DIRENT_H 20 @@ -288,11 +299,16 @@ 21 #if 1 22 #define U_TZSET tzset 23 #endif 24 +#ifndef U_IOS 25 +/* The iOS version of timezone is busted (at least in the simulator, it is 26 + never set to anything useful). Leave it undefined to avoid a code path 27 + in putil.c. */ 28 #if MAC_OS_X_VERSION_MIN_REQUIRED < MAC_OS_X_VERSION_10_5 29 #define U_TIMEZONE 0 30 #else 31 #define U_TIMEZONE timezone 32 #endif 33 +#endif // !U_IOS 34 #if 1 35 #define U_TZNAME tzname 36 #endif 37 --- source/common/putil.c 38 +++ source/common/putil.c 39 @@ -623,20 +623,28 @@ uprv_timezone() 40 #else 41 time_t t, t1, t2; 42 struct tm tmrec; 43 +#ifndef U_IOS 44 UBool dst_checked; 45 +#endif 46 int32_t tdiff = 0; 47 48 time(&t); 49 uprv_memcpy( &tmrec, localtime(&t), sizeof(tmrec) ); 50 +#ifndef U_IOS 51 dst_checked = (tmrec.tm_isdst != 0); /* daylight savings time is checked*/ 52 +#endif 53 t1 = mktime(&tmrec); /* local time in seconds*/ 54 uprv_memcpy( &tmrec, gmtime(&t), sizeof(tmrec) ); 55 t2 = mktime(&tmrec); /* GMT (or UTC) in seconds*/ 56 tdiff = t2 - t1; 57 +#ifndef U_IOS 58 + /* On iOS the calculated tdiff is correct so and doesn't need this dst 59 + shift applied. */ 60 /* imitate NT behaviour, which returns same timezone offset to GMT for 61 winter and summer*/ 62 if (dst_checked) 63 tdiff += 3600; 64 +#endif 65 return tdiff; 66 #endif 67 } 68 @@ -649,7 +661,7 @@ uprv_timezone() 69 extern U_IMPORT char *U_TZNAME[]; 70 #endif 71 72 -#if !UCONFIG_NO_FILE_IO && (defined(U_DARWIN) || defined(U_LINUX) || defined(U_BSD)) 73 +#if !UCONFIG_NO_FILE_IO && ((defined(U_DARWIN) && !defined(U_IOS)) || defined(U_LINUX) || defined(U_BSD)) 74 /* These platforms are likely to use Olson timezone IDs. */ 75 #define CHECK_LOCALTIME_LINK 1 76 #if defined(U_DARWIN) 77