aboutsummaryrefslogtreecommitdiffhomepage
path: root/third_party/icu/SkLoadICU.h
diff options
context:
space:
mode:
authorGravatar Hal Canary <halcanary@google.com>2018-02-08 13:06:56 -0500
committerGravatar Skia Commit-Bot <skia-commit-bot@chromium.org>2018-02-08 19:36:49 +0000
commit0e07ad7fe7e95365eebde4e870792f0abb1d0890 (patch)
tree7e3631143f119817a159aa3e40928cedfec94a01 /third_party/icu/SkLoadICU.h
parent4c790bd7dd8a6edacfc39b65b7043742331ab4da (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.h52
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
+