aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/ports/SkFontHost_win_dw.cpp
diff options
context:
space:
mode:
authorGravatar bungeman@google.com <bungeman@google.com@2bbb7eff-a529-9590-31e7-b0007b416f81>2013-08-21 22:41:05 +0000
committerGravatar bungeman@google.com <bungeman@google.com@2bbb7eff-a529-9590-31e7-b0007b416f81>2013-08-21 22:41:05 +0000
commit42a7829543115eafb5cf29499ba84a42d016a0cb (patch)
treea9be9ae30094a096653ac3a796e07431e5b89161 /src/ports/SkFontHost_win_dw.cpp
parent7344385b70d693e49b0bb283892dd1fd482386be (diff)
Better error reporting when dynamic loading fails with DirectWrite.
git-svn-id: http://skia.googlecode.com/svn/trunk@10869 2bbb7eff-a529-9590-31e7-b0007b416f81
Diffstat (limited to 'src/ports/SkFontHost_win_dw.cpp')
-rw-r--r--src/ports/SkFontHost_win_dw.cpp24
1 files changed, 18 insertions, 6 deletions
diff --git a/src/ports/SkFontHost_win_dw.cpp b/src/ports/SkFontHost_win_dw.cpp
index 5eba3099ce..29cfccb044 100644
--- a/src/ports/SkFontHost_win_dw.cpp
+++ b/src/ports/SkFontHost_win_dw.cpp
@@ -174,9 +174,12 @@ static HRESULT get_dwrite_factory(IDWriteFactory** factory) {
GetProcAddress(LoadLibraryW(L"dwrite.dll"), "DWriteCreateFactory")
)
;
-
if (!dWriteCreateFactoryProc) {
- return E_UNEXPECTED;
+ HRESULT hr = HRESULT_FROM_WIN32(GetLastError());
+ if (!IS_ERROR(hr)) {
+ hr = ERROR_PROC_NOT_FOUND;
+ }
+ return hr;
}
HRM(dWriteCreateFactoryProc(DWRITE_FACTORY_TYPE_SHARED,
@@ -1886,10 +1889,18 @@ SkTypeface* SkFontHost::CreateTypefaceFromStream(SkStream* stream) {
#endif
typedef decltype(GetUserDefaultLocaleName)* GetUserDefaultLocaleNameProc;
-static GetUserDefaultLocaleNameProc GetGetUserDefaultLocaleNameProc() {
- return reinterpret_cast<GetUserDefaultLocaleNameProc>(
+static HRESULT GetGetUserDefaultLocaleNameProc(GetUserDefaultLocaleNameProc* proc) {
+ *proc = reinterpret_cast<GetUserDefaultLocaleNameProc>(
GetProcAddress(LoadLibraryW(L"Kernel32.dll"), "GetUserDefaultLocaleName")
);
+ if (!*proc) {
+ HRESULT hr = HRESULT_FROM_WIN32(GetLastError());
+ if (!IS_ERROR(hr)) {
+ hr = ERROR_PROC_NOT_FOUND;
+ }
+ return hr;
+ }
+ return S_OK;
}
extern SkFontMgr* SkFontMgr_New_DirectWrite();
@@ -1906,9 +1917,10 @@ SkFontMgr* SkFontMgr_New_DirectWrite() {
int localeNameLen = 0;
// Dynamically load GetUserDefaultLocaleName function, as it is not available on XP.
- GetUserDefaultLocaleNameProc getUserDefaultLocaleNameProc = GetGetUserDefaultLocaleNameProc();
+ GetUserDefaultLocaleNameProc getUserDefaultLocaleNameProc = NULL;
+ HRESULT hr = GetGetUserDefaultLocaleNameProc(&getUserDefaultLocaleNameProc);
if (NULL == getUserDefaultLocaleNameProc) {
- SkDebugf("Could not get GetUserDefaultLocaleName.");
+ SK_TRACEHR(hr, "Could not get GetUserDefaultLocaleName.");
} else {
localeNameLen = getUserDefaultLocaleNameProc(localeNameStorage, LOCALE_NAME_MAX_LENGTH);
if (localeNameLen) {