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

Side by Side Diff: base/i18n/icu_util.cc

Issue 89863002: Move the logic for getting icu data out of icu_util (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: set the flag to 0 by default Created 7 years 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 unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « no previous file | build/common.gypi » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "base/i18n/icu_util.h" 5 #include "base/i18n/icu_util.h"
6 6
7 #include "build/build_config.h" 7 #include "build/build_config.h"
8 8
9 #if defined(OS_WIN) 9 #if defined(OS_WIN)
10 #include <windows.h> 10 #include <windows.h>
(...skipping 11 matching lines...) Expand all
22 #include "third_party/icu/source/common/unicode/udata.h" 22 #include "third_party/icu/source/common/unicode/udata.h"
23 23
24 #if defined(OS_MACOSX) 24 #if defined(OS_MACOSX)
25 #include "base/mac/foundation_util.h" 25 #include "base/mac/foundation_util.h"
26 #endif 26 #endif
27 27
28 #define ICU_UTIL_DATA_FILE 0 28 #define ICU_UTIL_DATA_FILE 0
29 #define ICU_UTIL_DATA_SHARED 1 29 #define ICU_UTIL_DATA_SHARED 1
30 #define ICU_UTIL_DATA_STATIC 2 30 #define ICU_UTIL_DATA_STATIC 2
31 31
32 #ifndef ICU_UTIL_DATA_IMPL
33
34 #if defined(OS_WIN)
35 #define ICU_UTIL_DATA_IMPL ICU_UTIL_DATA_SHARED
36 #elif defined(OS_IOS)
37 #define ICU_UTIL_DATA_IMPL ICU_UTIL_DATA_FILE
38 #else
39 #define ICU_UTIL_DATA_IMPL ICU_UTIL_DATA_STATIC
40 #endif
41
42 #endif // ICU_UTIL_DATA_IMPL
43
44 #if ICU_UTIL_DATA_IMPL == ICU_UTIL_DATA_FILE 32 #if ICU_UTIL_DATA_IMPL == ICU_UTIL_DATA_FILE
45 #define ICU_UTIL_DATA_FILE_NAME "icudt" U_ICU_VERSION_SHORT "l.dat" 33 #define ICU_UTIL_DATA_FILE_NAME "icudt" U_ICU_VERSION_SHORT "l.dat"
46 #elif ICU_UTIL_DATA_IMPL == ICU_UTIL_DATA_SHARED 34 #elif ICU_UTIL_DATA_IMPL == ICU_UTIL_DATA_SHARED
47 #define ICU_UTIL_DATA_SYMBOL "icudt" U_ICU_VERSION_SHORT "_dat" 35 #define ICU_UTIL_DATA_SYMBOL "icudt" U_ICU_VERSION_SHORT "_dat"
48 #if defined(OS_WIN) 36 #if defined(OS_WIN)
49 #define ICU_UTIL_DATA_SHARED_MODULE_NAME "icudt.dll" 37 #define ICU_UTIL_DATA_SHARED_MODULE_NAME "icudt.dll"
50 #endif 38 #endif
51 #endif 39 #endif
52 40
53 namespace base { 41 namespace base {
(...skipping 25 matching lines...) Expand all
79 if (!addr) { 67 if (!addr) {
80 DLOG(ERROR) << ICU_UTIL_DATA_SYMBOL << ": not found in " 68 DLOG(ERROR) << ICU_UTIL_DATA_SYMBOL << ": not found in "
81 << ICU_UTIL_DATA_SHARED_MODULE_NAME; 69 << ICU_UTIL_DATA_SHARED_MODULE_NAME;
82 return false; 70 return false;
83 } 71 }
84 72
85 UErrorCode err = U_ZERO_ERROR; 73 UErrorCode err = U_ZERO_ERROR;
86 udata_setCommonData(reinterpret_cast<void*>(addr), &err); 74 udata_setCommonData(reinterpret_cast<void*>(addr), &err);
87 return err == U_ZERO_ERROR; 75 return err == U_ZERO_ERROR;
88 #elif (ICU_UTIL_DATA_IMPL == ICU_UTIL_DATA_STATIC) 76 #elif (ICU_UTIL_DATA_IMPL == ICU_UTIL_DATA_STATIC)
89 // Mac/Linux bundle the ICU data in. 77 // The ICU data is statically linked.
90 return true; 78 return true;
91 #elif (ICU_UTIL_DATA_IMPL == ICU_UTIL_DATA_FILE) 79 #elif (ICU_UTIL_DATA_IMPL == ICU_UTIL_DATA_FILE)
92 #if !defined(OS_MACOSX)
93 // For now, expect the data file to be alongside the executable.
94 // This is sufficient while we work on unit tests, but will eventually
95 // likely live in a data directory.
96 FilePath data_path;
97 bool path_ok = PathService::Get(base::DIR_EXE, &data_path);
98 DCHECK(path_ok);
99 u_setDataDirectory(data_path.value().c_str());
100 // Only look for the packaged data file;
101 // the default behavior is to look for individual files.
102 UErrorCode err = U_ZERO_ERROR;
103 udata_setFileAccess(UDATA_ONLY_PACKAGES, &err);
104 return err == U_ZERO_ERROR;
105 #else
106 // If the ICU data directory is set, ICU won't actually load the data until 80 // If the ICU data directory is set, ICU won't actually load the data until
107 // it is needed. This can fail if the process is sandboxed at that time. 81 // it is needed. This can fail if the process is sandboxed at that time.
108 // Instead, Mac maps the file in and hands off the data so the sandbox won't 82 // Instead, we map the file in and hand off the data so the sandbox won't
109 // cause any problems. 83 // cause any problems.
110 84
111 // Chrome doesn't normally shut down ICU, so the mapped data shouldn't ever 85 // Chrome doesn't normally shut down ICU, so the mapped data shouldn't ever
112 // be released. 86 // be released.
113 CR_DEFINE_STATIC_LOCAL(base::MemoryMappedFile, mapped_file, ()); 87 CR_DEFINE_STATIC_LOCAL(base::MemoryMappedFile, mapped_file, ());
114 if (!mapped_file.IsValid()) { 88 if (!mapped_file.IsValid()) {
115 // Assume it is in the framework bundle's Resources directory. 89 // Assume it is in the framework bundle's Resources directory.
Jiang Jiang 2013/12/04 10:43:35 This comment should be moved down to close to that
jungshik at Google 2013/12/09 05:54:46 Good catch. thanks.
90 #if !defined(OS_MACOSX)
91 // For now, expect the data file to be alongside the executable.
92 // This is sufficient while we work on unit tests, but will eventually
93 // likely live in a data directory.
94 FilePath data_path;
95 bool path_ok = PathService::Get(base::DIR_EXE, &data_path);
96 DCHECK(path_ok);
97 data_path = data_path.AppendASCII(ICU_UTIL_DATA_FILE_NAME);
98 #else
116 FilePath data_path = 99 FilePath data_path =
117 base::mac::PathForFrameworkBundleResource(CFSTR(ICU_UTIL_DATA_FILE_NAME)); 100 base::mac::PathForFrameworkBundleResource(CFSTR(ICU_UTIL_DATA_FILE_NAME));
Jiang Jiang 2013/12/04 10:45:42 Wrong indent by the way. I also wonder how it can
jungshik at Google 2013/12/09 05:54:46 Thank you for the comment. I don't know the answe
118 if (data_path.empty()) { 101 if (data_path.empty()) {
119 DLOG(ERROR) << ICU_UTIL_DATA_FILE_NAME << " not found in bundle"; 102 DLOG(ERROR) << ICU_UTIL_DATA_FILE_NAME << " not found in bundle";
120 return false; 103 return false;
121 } 104 }
105 #endif // OS check
122 if (!mapped_file.Initialize(data_path)) { 106 if (!mapped_file.Initialize(data_path)) {
123 DLOG(ERROR) << "Couldn't mmap " << data_path.value(); 107 DLOG(ERROR) << "Couldn't mmap " << data_path.value();
124 return false; 108 return false;
125 } 109 }
126 } 110 }
127 UErrorCode err = U_ZERO_ERROR; 111 UErrorCode err = U_ZERO_ERROR;
128 udata_setCommonData(const_cast<uint8*>(mapped_file.data()), &err); 112 udata_setCommonData(const_cast<uint8*>(mapped_file.data()), &err);
129 return err == U_ZERO_ERROR; 113 return err == U_ZERO_ERROR;
130 #endif // OS check
131 #endif 114 #endif
132 } 115 }
133 116
134 } // namespace i18n 117 } // namespace i18n
135 } // namespace base 118 } // namespace base
OLDNEW
« no previous file with comments | « no previous file | build/common.gypi » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698