OLD | NEW |
1 // Copyright (c) 2006-2008 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2006-2008 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 "build/build_config.h" | 5 #include "build/build_config.h" |
6 | 6 |
7 #if defined(OS_WIN) | 7 #if defined(OS_WIN) |
8 #include <windows.h> | 8 #include <windows.h> |
9 #endif | 9 #endif |
10 | 10 |
11 #include <string> | 11 #include <string> |
12 | 12 |
13 #include "base/icu_util.h" | 13 #include "base/icu_util.h" |
14 | 14 |
15 #include "base/file_path.h" | 15 #include "base/file_path.h" |
16 #include "base/file_util.h" | 16 #include "base/file_util.h" |
17 #include "base/logging.h" | 17 #include "base/logging.h" |
18 #include "base/path_service.h" | 18 #include "base/path_service.h" |
| 19 #include "base/string_util.h" |
19 #include "base/sys_string_conversions.h" | 20 #include "base/sys_string_conversions.h" |
20 #include "unicode/putil.h" | 21 #include "unicode/putil.h" |
21 #include "unicode/udata.h" | 22 #include "unicode/udata.h" |
22 | 23 |
23 #define ICU_UTIL_DATA_FILE 0 | 24 #define ICU_UTIL_DATA_FILE 0 |
24 #define ICU_UTIL_DATA_SHARED 1 | 25 #define ICU_UTIL_DATA_SHARED 1 |
25 #define ICU_UTIL_DATA_STATIC 2 | 26 #define ICU_UTIL_DATA_STATIC 2 |
26 | 27 |
27 #ifndef ICU_UTIL_DATA_IMPL | 28 #ifndef ICU_UTIL_DATA_IMPL |
28 | 29 |
29 #if defined(OS_WIN) | 30 #if defined(OS_WIN) |
30 #define ICU_UTIL_DATA_IMPL ICU_UTIL_DATA_SHARED | 31 #define ICU_UTIL_DATA_IMPL ICU_UTIL_DATA_SHARED |
31 #elif defined(OS_MACOSX) | 32 #elif defined(OS_MACOSX) |
32 #define ICU_UTIL_DATA_IMPL ICU_UTIL_DATA_STATIC | 33 #define ICU_UTIL_DATA_IMPL ICU_UTIL_DATA_STATIC |
33 #elif defined(OS_LINUX) | 34 #elif defined(OS_LINUX) |
34 #define ICU_UTIL_DATA_IMPL ICU_UTIL_DATA_FILE | 35 #define ICU_UTIL_DATA_IMPL ICU_UTIL_DATA_FILE |
35 #endif | 36 #endif |
36 | 37 |
37 #endif // ICU_UTIL_DATA_IMPL | 38 #endif // ICU_UTIL_DATA_IMPL |
38 | 39 |
39 #if defined(OS_WIN) | 40 #if defined(OS_WIN) |
40 #define ICU_UTIL_DATA_SYMBOL "icudt38_dat" | 41 #define ICU_UTIL_DATA_SYMBOL "icudt" U_ICU_VERSION_SHORT "_dat" |
41 #define ICU_UTIL_DATA_SHARED_MODULE_NAME L"icudt38.dll" | 42 #define ICU_UTIL_DATA_SHARED_MODULE_NAME "icudt" U_ICU_VERSION_SHORT ".dll" |
42 #endif | 43 #endif |
43 | 44 |
44 namespace icu_util { | 45 namespace icu_util { |
45 | 46 |
46 bool Initialize() { | 47 bool Initialize() { |
47 #ifndef NDEBUG | 48 #ifndef NDEBUG |
48 // Assert that we are not called more than once. Even though calling this | 49 // Assert that we are not called more than once. Even though calling this |
49 // function isn't harmful (ICU can handle it), being called twice probably | 50 // function isn't harmful (ICU can handle it), being called twice probably |
50 // indicates a programming error. | 51 // indicates a programming error. |
51 static bool called_once = false; | 52 static bool called_once = false; |
52 DCHECK(!called_once); | 53 DCHECK(!called_once); |
53 called_once = true; | 54 called_once = true; |
54 #endif | 55 #endif |
55 | 56 |
56 #if (ICU_UTIL_DATA_IMPL == ICU_UTIL_DATA_SHARED) | 57 #if (ICU_UTIL_DATA_IMPL == ICU_UTIL_DATA_SHARED) |
57 // We expect to find the ICU data module alongside the current module. | 58 // We expect to find the ICU data module alongside the current module. |
58 std::wstring data_path; | 59 std::wstring data_path; |
59 PathService::Get(base::DIR_MODULE, &data_path); | 60 PathService::Get(base::DIR_MODULE, &data_path); |
60 file_util::AppendToPath(&data_path, ICU_UTIL_DATA_SHARED_MODULE_NAME); | 61 file_util::AppendToPath(&data_path, ASCIIToWide(ICU_UTIL_DATA_SHARED_MODULE_NA
ME)); |
61 | 62 |
62 HMODULE module = LoadLibrary(data_path.c_str()); | 63 HMODULE module = LoadLibrary(data_path.c_str()); |
63 if (!module) | 64 if (!module) |
64 return false; | 65 return false; |
65 | 66 |
66 FARPROC addr = GetProcAddress(module, ICU_UTIL_DATA_SYMBOL); | 67 FARPROC addr = GetProcAddress(module, ICU_UTIL_DATA_SYMBOL); |
67 if (!addr) | 68 if (!addr) |
68 return false; | 69 return false; |
69 | 70 |
70 UErrorCode err = U_ZERO_ERROR; | 71 UErrorCode err = U_ZERO_ERROR; |
(...skipping 12 matching lines...) Expand all Loading... |
83 u_setDataDirectory(data_path.value().c_str()); | 84 u_setDataDirectory(data_path.value().c_str()); |
84 // Only look for the packaged data file; | 85 // Only look for the packaged data file; |
85 // the default behavior is to look for individual files. | 86 // the default behavior is to look for individual files. |
86 UErrorCode err = U_ZERO_ERROR; | 87 UErrorCode err = U_ZERO_ERROR; |
87 udata_setFileAccess(UDATA_ONLY_PACKAGES, &err); | 88 udata_setFileAccess(UDATA_ONLY_PACKAGES, &err); |
88 return err == U_ZERO_ERROR; | 89 return err == U_ZERO_ERROR; |
89 #endif | 90 #endif |
90 } | 91 } |
91 | 92 |
92 } // namespace icu_util | 93 } // namespace icu_util |
OLD | NEW |