diff options
author | Hal Canary <halcanary@google.com> | 2018-02-08 13:06:56 -0500 |
---|---|---|
committer | Skia Commit-Bot <skia-commit-bot@chromium.org> | 2018-02-08 19:36:49 +0000 |
commit | 0e07ad7fe7e95365eebde4e870792f0abb1d0890 (patch) | |
tree | 7e3631143f119817a159aa3e40928cedfec94a01 /third_party/icu/SkLoadICU.h | |
parent | 4c790bd7dd8a6edacfc39b65b7043742331ab4da (diff) |
ICU on windows
Change-Id: Ib1a2f017d96c5157c60d512332fddfef77c5ae8e
Reviewed-on: https://skia-review.googlesource.com/103001
Reviewed-by: Ben Wagner <bungeman@google.com>
Commit-Queue: Hal Canary <halcanary@google.com>
Diffstat (limited to 'third_party/icu/SkLoadICU.h')
-rw-r--r-- | third_party/icu/SkLoadICU.h | 52 |
1 files changed, 52 insertions, 0 deletions
diff --git a/third_party/icu/SkLoadICU.h b/third_party/icu/SkLoadICU.h new file mode 100644 index 0000000000..e28d629f1a --- /dev/null +++ b/third_party/icu/SkLoadICU.h @@ -0,0 +1,52 @@ +/* + * Copyright 2018 Google Inc. + * + * Use of this source code is governed by a BSD-style license that can be + * found in the LICENSE file. + */ +#ifndef load_icu_DEFINED +#define load_icu_DEFINED + +#include "SkTypes.h" + +#ifdef SK_BUILD_FOR_WIN + +#include "../private/SkLeanWindows.h" + +#include "unicode/uvernum.h" +#include "unicode/udata.h" + +#define ICU_UTIL_DATA_SYMBOL "icudt" U_ICU_VERSION_SHORT "_dat" +#define ICU_UTIL_DATA_SHARED_MODULE_NAME "icudt.dll" + +inline void SkLoadICU() { + HMODULE module = LoadLibrary(ICU_UTIL_DATA_SHARED_MODULE_NAME); + if (!module) { + SK_ABORT("Failed to load " ICU_UTIL_DATA_SHARED_MODULE_NAME "\n"); + } + FARPROC addr = GetProcAddress(module, ICU_UTIL_DATA_SYMBOL); + if (!addr) { + SK_ABORT("Symbol " ICU_UTIL_DATA_SYMBOL " missing in " + ICU_UTIL_DATA_SHARED_MODULE_NAME ".\n"); + } + UErrorCode err = U_ZERO_ERROR; + udata_setCommonData(reinterpret_cast<void*>(addr), &err); + if (err != U_ZERO_ERROR) { + SkDebugf("udata_setCommonData() returned %d.\n", (int)err); + SK_ABORT(""); + } + udata_setFileAccess(UDATA_ONLY_PACKAGES, &err); + if (err != U_ZERO_ERROR) { + SkDebugf("udata_setFileAccess() returned %d.\n", (int)err); + SK_ABORT(""); + } +} + +#undef ICU_UTIL_DATA_SHARED_MODULE_NAME +#undef ICU_UTIL_DATA_SYMBOL + +#else +inline void SkLoadICU() {} +#endif // SK_BUILD_FOR_WIN +#endif // load_icu_DEFINED + |