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

Unified Diff: patches/tzdetect.patch

Issue 1621943002: ICU 56 step 4: Apply post-56 fixes for measure/date format (Closed) Base URL: https://chromium.googlesource.com/chromium/deps/icu.git@56goog
Patch Set: Created 4 years, 11 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 | « patches/stringthreadtest.patch ('k') | patches/tzdetect2.patch » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: patches/tzdetect.patch
diff --git a/patches/tzdetect.patch b/patches/tzdetect.patch
index e31679562be92620d36587fc080198d0b3ea9f45..fec7093c2eb66e49327712e574e943f04015fc43 100644
--- a/patches/tzdetect.patch
+++ b/patches/tzdetect.patch
@@ -1,200 +1,50 @@
-diff --git a/source/i18n/timezone.cpp b/source/i18n/timezone.cpp
-index 6ed008d..6b3f8d2 100644
---- a/source/i18n/timezone.cpp
-+++ b/source/i18n/timezone.cpp
-@@ -1,6 +1,6 @@
- /*
- *******************************************************************************
--* Copyright (C) 1997-2014, International Business Machines Corporation and
-+* Copyright (C) 1997-2015, International Business Machines Corporation and
- * others. All Rights Reserved.
- *******************************************************************************
- *
-@@ -440,21 +440,9 @@ TimeZone::createTimeZone(const UnicodeString& ID)
-
- // -------------------------------------
-
--/**
-- * Initialize DEFAULT_ZONE from the system default time zone.
-- * Upon return, DEFAULT_ZONE will not be NULL, unless operator new()
-- * returns NULL.
-- */
--static void U_CALLCONV initDefault()
-+TimeZone* U_EXPORT2
-+TimeZone::detectHostTimeZone()
- {
-- ucln_i18n_registerCleanup(UCLN_I18N_TIMEZONE, timeZone_cleanup);
--
-- // If setDefault() has already been called we can skip getting the
-- // default zone information from the system.
-- if (DEFAULT_ZONE != NULL) {
-- return;
-- }
--
- // We access system timezone data through TPlatformUtilities,
- // including tzset(), timezone, and tzname[].
- int32_t rawOffset = 0;
-@@ -463,16 +451,6 @@ static void U_CALLCONV initDefault()
- // First, try to create a system timezone, based
- // on the string ID in tzname[0].
-
-- // NOTE: this code is safely single threaded, being only
-- // run via umtx_initOnce().
-- //
-- // Some of the locale/timezone OS functions may not be thread safe,
-- //
-- // The operating system might actually use ICU to implement timezones.
-- // So we may have ICU calling ICU here, like on AIX.
-- // There shouldn't be a problem with this; initOnce does not hold a mutex
-- // while the init function is being run.
--
- uprv_tzset(); // Initialize tz... system data
-
- // Get the timezone ID from the host. This function should do
-@@ -484,13 +462,13 @@ static void U_CALLCONV initDefault()
- // Invert sign because UNIX semantics are backwards
- rawOffset = uprv_timezone() * -U_MILLIS_PER_SECOND;
-
-- TimeZone* default_zone = NULL;
-+ TimeZone* hostZone = NULL;
-
- /* Make sure that the string is NULL terminated to prevent BoundsChecker/Purify warnings. */
- UnicodeString hostStrID(hostID, -1, US_INV);
- hostStrID.append((UChar)0);
- hostStrID.truncate(hostStrID.length()-1);
-- default_zone = createSystemTimeZone(hostStrID);
-+ hostZone = createSystemTimeZone(hostStrID);
-
- #if U_PLATFORM_USES_ONLY_WIN32_API
- // hostID points to a heap-allocated location on Windows.
-@@ -498,30 +476,69 @@ static void U_CALLCONV initDefault()
+diff --git a/source/common/putil.cpp b/source/common/putil.cpp
+index 5f09288..c87b60e 100644
+--- a/source/common/putil.cpp
++++ b/source/common/putil.cpp
+@@ -970,6 +970,15 @@ static char* searchForTZFile(const char* path, DefaultTZInfo* tzInfo) {
+ return result;
+ }
#endif
-
- int32_t hostIDLen = hostStrID.length();
-- if (default_zone != NULL && rawOffset != default_zone->getRawOffset()
-+ if (hostZone != NULL && rawOffset != hostZone->getRawOffset()
- && (3 <= hostIDLen && hostIDLen <= 4))
- {
- // Uh oh. This probably wasn't a good id.
- // It was probably an ambiguous abbreviation
-- delete default_zone;
-- default_zone = NULL;
-+ delete hostZone;
-+ hostZone = NULL;
- }
-
- // Construct a fixed standard zone with the host's ID
- // and raw offset.
-- if (default_zone == NULL) {
-- default_zone = new SimpleTimeZone(rawOffset, hostStrID);
-+ if (hostZone == NULL) {
-+ hostZone = new SimpleTimeZone(rawOffset, hostStrID);
- }
-
- // If we _still_ don't have a time zone, use GMT.
-- if (default_zone == NULL) {
-+ //
-+ // Note: This is extremely unlikely situation. If
-+ // new SimpleTimeZone(...) above fails, the following
-+ // code may also fail.
-+ if (hostZone == NULL) {
- const TimeZone* temptz = TimeZone::getGMT();
- // If we can't use GMT, get out.
- if (temptz == NULL) {
-- return;
-+ return NULL;
- }
-- default_zone = temptz->clone();
-+ hostZone = temptz->clone();
-+ }
+
-+ return hostZone;
++U_CAPI void U_EXPORT2
++uprv_tzname_clear_cache()
++{
++#if defined(CHECK_LOCALTIME_LINK) && !defined(DEBUG_SKIP_LOCALTIME_LINK)
++ gTimeZoneBufferPtr = NULL;
++#endif
+}
+
-+// -------------------------------------
-+
-+/**
-+ * Initialize DEFAULT_ZONE from the system default time zone.
-+ * Upon return, DEFAULT_ZONE will not be NULL, unless operator new()
-+ * returns NULL.
+ U_CAPI const char* U_EXPORT2
+ uprv_tzname(int n)
+ {
+diff --git a/source/common/putilimp.h b/source/common/putilimp.h
+index 5de801f..55ec0ae 100644
+--- a/source/common/putilimp.h
++++ b/source/common/putilimp.h
+@@ -479,6 +479,12 @@ U_INTERNAL int32_t U_EXPORT2 uprv_timezone(void);
+ U_INTERNAL const char* U_EXPORT2 uprv_tzname(int n);
+
+ /**
++ * Reset the global tzname cache.
++ * @internal
+ */
-+static void U_CALLCONV initDefault()
-+{
-+ ucln_i18n_registerCleanup(UCLN_I18N_TIMEZONE, timeZone_cleanup);
-+
-+ // If setDefault() has already been called we can skip getting the
-+ // default zone information from the system.
-+ if (DEFAULT_ZONE != NULL) {
-+ return;
- }
-+
-+ // NOTE: this code is safely single threaded, being only
-+ // run via umtx_initOnce().
-+ //
-+ // Some of the locale/timezone OS functions may not be thread safe,
-+ //
-+ // The operating system might actually use ICU to implement timezones.
-+ // So we may have ICU calling ICU here, like on AIX.
-+ // There shouldn't be a problem with this; initOnce does not hold a mutex
-+ // while the init function is being run.
++U_INTERNAL void uprv_tzname_clear_cache();
+
-+ // The code detecting the host time zone was separated from this
-+ // and implemented as TimeZone::detectHostTimeZone()
-+
-+ TimeZone *default_zone = TimeZone::detectHostTimeZone();
-
- // The only way for DEFAULT_ZONE to be non-null at this point is if the user
- // made a thread-unsafe call to setDefault() or adoptDefault() in another
-diff --git a/source/i18n/unicode/timezone.h b/source/i18n/unicode/timezone.h
-index fa4f5bf..c3356c9 100644
---- a/source/i18n/unicode/timezone.h
-+++ b/source/i18n/unicode/timezone.h
-@@ -1,5 +1,5 @@
- /*************************************************************************
--* Copyright (c) 1997-2014, International Business Machines Corporation
-+* Copyright (c) 1997-2015, International Business Machines Corporation
- * and others. All Rights Reserved.
- **************************************************************************
- *
-@@ -273,6 +273,23 @@ public:
- static const UnicodeString U_EXPORT2 getEquivalentID(const UnicodeString& id,
- int32_t index);
++/**
+ * Get UTC (GMT) time measured in milliseconds since 0:00 on 1/1/1970.
+ * This function is affected by 'faketime' and should be the bottleneck for all user-visible ICU time functions.
+ * @return the UTC time measured in milliseconds
+diff --git a/source/i18n/timezone.cpp b/source/i18n/timezone.cpp
+index 59c3891..00eca38 100644
+--- a/source/i18n/timezone.cpp
++++ b/source/i18n/timezone.cpp
+@@ -458,6 +458,8 @@ TimeZone::detectHostTimeZone()
-+#ifndef U_HIDE_DRAFT_API
-+ /**
-+ * Creates an instance of TimeZone detected from the current host
-+ * system configuration. Note that ICU4C does not change the default
-+ * time zone unless TimeZone::adoptDefault(TimeZone*) or
-+ * TimeZone::setDefault(const TimeZone&) is explicitly called by a
-+ * user. This method does not update the current ICU's default,
-+ * and may return a different TimeZone from the one returned by
-+ * TimeZone::createDefault().
-+ *
-+ * @return A new instance of TimeZone detected from the current host system
-+ * configuration.
-+ * @draft ICU 55
-+ */
-+ static TimeZone* U_EXPORT2 detectHostTimeZone();
-+#endif
-+
- /**
- * Creates a new copy of the default TimeZone for this host. Unless the default time
- * zone has already been set using adoptDefault() or setDefault(), the default is
-diff --git a/source/test/intltest/tztest.cpp b/source/test/intltest/tztest.cpp
-index 4111e51..76304e9 100644
---- a/source/test/intltest/tztest.cpp
-+++ b/source/test/intltest/tztest.cpp
-@@ -135,6 +135,13 @@ TimeZoneTest::TestGenericAPI()
- infoln("WARNING: t_timezone may be incorrect. It is not a multiple of 15min.", tzoffset);
- }
+ uprv_tzset(); // Initialize tz... system data
-+ TimeZone* hostZone = TimeZone::detectHostTimeZone();
-+ /* Host time zone's offset should match the offset returned by uprv_timezone() */
-+ if (hostZone->getRawOffset() != tzoffset * (-1000)) {
-+ errln("FAIL: detectHostTimeZone()'s raw offset != host timezone's offset");
-+ }
-+ delete hostZone;
++ uprv_tzname_clear_cache();
+
- UErrorCode status = U_ZERO_ERROR;
- const char* tzver = TimeZone::getTZDataVersion(status);
- if (U_FAILURE(status)) {
+ // Get the timezone ID from the host. This function should do
+ // any required host-specific remapping; e.g., on Windows this
+ // function maps the Date and Time control panel setting to an
« no previous file with comments | « patches/stringthreadtest.patch ('k') | patches/tzdetect2.patch » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698