1 | // Licensed to the .NET Foundation under one or more agreements. |
2 | // The .NET Foundation licenses this file to you under the MIT license. |
3 | // See the LICENSE file in the project root for more information. |
4 | // =========================================================================== |
5 | // File: umisc.h |
6 | // |
7 | |
8 | // =========================================================================== |
9 | |
10 | |
11 | // Abstract: |
12 | // |
13 | // A collection of utility macros. |
14 | // |
15 | |
16 | #ifndef UMISC_H |
17 | #define UMISC_H |
18 | |
19 | #define COM_METHOD HRESULT STDMETHODCALLTYPE |
20 | |
21 | inline HRESULT HrFromWin32(DWORD dwWin32Error) |
22 | { |
23 | return HRESULT_FROM_WIN32(dwWin32Error); |
24 | } |
25 | |
26 | // Some helper #def's to safely Release, close & delete Objects under |
27 | // failure conditions |
28 | |
29 | #define RELEASE(x) \ |
30 | do \ |
31 | { \ |
32 | if (x) \ |
33 | { \ |
34 | IUnknown *punk = x; \ |
35 | x = NULL; \ |
36 | punk->Release(); \ |
37 | } \ |
38 | } while (0) |
39 | |
40 | |
41 | #include "debugmacros.h" |
42 | // |
43 | // Good for verifying params withing range. |
44 | // |
45 | #define IfFalseGo(expr, HR) IfFailGo((expr) ? S_OK : (HR)) |
46 | |
47 | // ---------------------------------------------------------------------------- |
48 | // Validation macros |
49 | // Note that the Win32 APIs like IsBadReadPtr are banned |
50 | // |
51 | #define IsValidReadPtr(ptr, type) ((ptr)!=NULL) |
52 | |
53 | #define IsValidWritePtr(ptr, type) ((ptr)!=NULL) |
54 | |
55 | #define IsValidReadBufferPtr(ptr, type, len) ((ptr)!=NULL) |
56 | |
57 | #define IsValidWriteBufferPtr(ptr, type, len) ((ptr)!=NULL) |
58 | |
59 | #define IsValidInterfacePtr(ptr, type) ((ptr)!=NULL) |
60 | |
61 | #define IsValidCodePtr(ptr) ((ptr)!=NULL) |
62 | |
63 | #define IsValidStringPtr(ptr) ((ptr)!=NULL) |
64 | |
65 | #define IsValidIID(iid) TRUE |
66 | |
67 | #define IsValidCLSID(clsid) TRUE |
68 | |
69 | #endif |
70 | |