1 /*
2  * Copyright 2011 Google Inc.
3  *
4  * Use of this source code is governed by a BSD-style license that can be
5  * found in the LICENSE file.
6  */
7 
8 #include "SkTypes.h"
9 #if defined(SK_BUILD_FOR_WIN)
10 
11 #include "SkHRESULT.h"
12 
13 void SkTraceHR(const char* file, unsigned long line, HRESULT hr, const char* msg) {
14     if (msg) {
15         SkDebugf("%s\n", msg);
16     }
17     SkDebugf("%s(%lu) : error 0x%x: ", file, line, hr);
18 
19     LPSTR errorText = nullptr;
20     FormatMessageA(FORMAT_MESSAGE_ALLOCATE_BUFFER |
21                    FORMAT_MESSAGE_FROM_SYSTEM |
22                    FORMAT_MESSAGE_IGNORE_INSERTS,
23                    nullptr,
24                    hr,
25                    MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT),
26                    (LPSTR) &errorText,
27                    0,
28                    nullptr
29     );
30 
31     if (nullptr == errorText) {
32         SkDebugf("<unknown>\n");
33     } else {
34         SkDebugf("%s", errorText);
35         LocalFree(errorText);
36         errorText = nullptr;
37     }
38 }
39 
40 #endif//defined(SK_BUILD_FOR_WIN)
41