| //===-- WinAdapter.cpp - Windows Adapter for other platforms ----*- C++ -*-===// |
| // |
| // The LLVM Compiler Infrastructure |
| // |
| // This file is distributed under the University of Illinois Open Source |
| // License. See LICENSE.TXT for details. |
| // |
| //===----------------------------------------------------------------------===// |
| |
| #ifndef _WIN32 |
| |
| #include "dxc/Support/WinAdapter.h" |
| #include "dxc/Support/WinFunctions.h" |
| |
| //===--------------------- UUID Related Macros ----------------------------===// |
| |
| #ifdef __EMULATE_UUID |
| |
| size_t UuidStrHash(const char* k) { |
| long h = 0; |
| while (*k) { |
| h = (h << 4) + *(k++); |
| long g = h & 0xF0000000L; |
| if (g != 0) |
| h ^= g >> 24; |
| h &= ~g; |
| } |
| return h; |
| } |
| |
| #endif // __EMULATE_UUID |
| |
| DEFINE_CROSS_PLATFORM_UUIDOF(IUnknown) |
| DEFINE_CROSS_PLATFORM_UUIDOF(INoMarshal) |
| DEFINE_CROSS_PLATFORM_UUIDOF(IStream) |
| DEFINE_CROSS_PLATFORM_UUIDOF(ISequentialStream) |
| |
| //===--------------------------- IUnknown ---------------------------------===// |
| |
| ULONG IUnknown::AddRef() { |
| ++m_count; |
| return m_count; |
| } |
| ULONG IUnknown::Release() { |
| ULONG result = --m_count; |
| if (m_count == 0) { |
| delete this; |
| } |
| return result; |
| } |
| IUnknown::~IUnknown() {} |
| |
| //===--------------------------- IMalloc ----------------------------------===// |
| |
| void *IMalloc::Alloc(size_t size) { return malloc(size); } |
| void *IMalloc::Realloc(void *ptr, size_t size) { return realloc(ptr, size); } |
| void IMalloc::Free(void *ptr) { free(ptr); } |
| HRESULT IMalloc::QueryInterface(REFIID riid, void **ppvObject) { |
| assert(false && "QueryInterface not implemented for IMalloc."); |
| return E_NOINTERFACE; |
| } |
| |
| //===--------------------------- CAllocator -------------------------------===// |
| |
| void *CAllocator::Reallocate(void *p, size_t nBytes) throw() { |
| return realloc(p, nBytes); |
| } |
| void *CAllocator::Allocate(size_t nBytes) throw() { return malloc(nBytes); } |
| void CAllocator::Free(void *p) throw() { free(p); } |
| |
| //===---------------------- Char converstion ------------------------------===// |
| |
| const char *CPToLocale(uint32_t CodePage) { |
| #ifdef __APPLE__ |
| static const char *utf8 = "en_US.UTF-8"; |
| static const char *iso88591 = "en_US.ISO8859-1"; |
| #else |
| static const char *utf8 = "en_US.utf8"; |
| static const char *iso88591 = "en_US.iso88591"; |
| #endif |
| if (CodePage == CP_UTF8) { |
| return utf8; |
| } else if (CodePage == CP_ACP) { |
| // Experimentation suggests that ACP is expected to be ISO-8859-1 |
| return iso88591; |
| } |
| return nullptr; |
| } |
| |
| //===--------------------------- CHandle -------------------------------===// |
| |
| CHandle::CHandle(HANDLE h) { m_h = h; } |
| CHandle::~CHandle() { CloseHandle(m_h); } |
| CHandle::operator HANDLE() const throw() { return m_h; } |
| |
| #endif |