master ohmu/fastfetch-openbsd / src / common / windows / com.h
ohmu  ·  2026-10-15
 1#pragma once
 2
 3#include <assert.h>
 4#include <unknwn.h>
 5
 6// Initialize COM & WinRT
 7const char* ffInitCom(void);
 8
 9static inline void ffReleaseComObject(void* ppUnknown) {
10    assert(ppUnknown);
11    IUnknown* pUnknown = *(IUnknown**) ppUnknown;
12    if (pUnknown) {
13#ifdef __cplusplus
14        pUnknown->Release();
15#else
16        pUnknown->lpVtbl->Release(pUnknown);
17#endif
18        *(IUnknown**) ppUnknown = nullptr;
19    }
20}
21
22#define FF_AUTO_RELEASE_COM_OBJECT [[gnu::cleanup(ffReleaseComObject)]]