24#if !defined(ADD61B45737D4F4ABCD5725E989A2EDA)
25#define ADD61B45737D4F4ABCD5725E989A2EDA
27#include <miktex/Core/config.h>
33#if defined(__cplusplus)
34# include "Exceptions.h"
39#if defined(__cplusplus)
43#if defined(__cplusplus)
49#define MIKTEX_DEBUG_BEGIN_NAMESPACE \
53#define MIKTEX_DEBUG_END_NAMESPACE \
57#if defined(__cplusplus)
58MIKTEX_DEBUG_BEGIN_NAMESPACE;
60MIKTEXCOREEXPORT MIKTEXNORETURN
void MIKTEXCEECALL FatalMiKTeXError(
const std::string& message,
const MiKTeX::Core::MiKTeXException::KVMAP& info,
const MiKTeX::Core::SourceLocation& sourceLocation);
66# pragma push_macro("StrDup")
73# pragma pop_macro("StrDup")
78MIKTEX_DEBUG_END_NAMESPACE;
81MIKTEX_BEGIN_EXTERN_C_BLOCK;
83MIKTEXCORECEEAPI(
void*) miktex_core_malloc(
size_t size,
const char* lpszFileName,
int line);
84MIKTEXCORECEEAPI(
void*) miktex_core_realloc(
void* ptr,
size_t size,
const char* lpszFileName,
int line);
85MIKTEXCORECEEAPI(
void*) miktex_core_calloc(
size_t num,
size_t size,
const char* lpszFileName,
int line);
86MIKTEXCORECEEAPI(
char*) miktex_core_strdup(
const char* lpsz,
const char* lpszFileName,
int line);
87MIKTEXCORECEEAPI(
void) miktex_core_free(
void* ptr,
const char* lpszFileName,
int line);
88MIKTEXCOREEXPORT
void MIKTEXNORETURN MIKTEXCEECALL miktex_core_fatal_error(
const char* lpszMiktexFunction,
const char* lpszMessage,
const char* lpszInfo,
const char* lpszSourceFile,
int lpszSourceLine);
90MIKTEX_END_EXTERN_C_BLOCK;
92#define MIKTEX_MALLOC(size) \
93 MiKTeX::Debug::Malloc((size), MIKTEX_SOURCE_LOCATION_DEBUG())
95#define MIKTEX_REALLOC(ptr, size) \
96 MiKTeX::Debug::Realloc((ptr), (size), MIKTEX_SOURCE_LOCATION_DEBUG())
98#define MIKTEX_CALLOC(num, size) \
99 MiKTeX::Debug::Calloc(num, size, MIKTEX_SOURCE_LOCATION_DEBUG())
101# define MIKTEX_STRDUP(str) \
102 MiKTeX::Debug::StrDup((str), MIKTEX_SOURCE_LOCATION_DEBUG())
104#define MIKTEX_FREE(ptr) \
105 MiKTeX::Debug::Free((ptr), MIKTEX_SOURCE_LOCATION_DEBUG())
107#if defined(MIKTEX_DEBUG)
108# define MIKTEX_ASSERT(expr) \
112 : (MiKTeX::Debug::FatalMiKTeXError(MIKTEXTEXT("Assertion failed."), MiKTeX::Core::MiKTeXException::KVMAP("expr", #expr), MIKTEX_SOURCE_LOCATION()), \
115# define MIKTEX_ASSERT(expr) (static_cast<void>(0))
118#if defined(MIKTEX_DEBUG)
119# define MIKTEX_VERIFY(expr) \
123 : (miktex_core_fatal_error \
125 MIKTEXTEXT("Assertion failed."), \
131# define MIKTEX_VERIFY(expr) ((void)(expr))
135# define MIKTEX_ASSUME(expr) __assume(expr)
137# define MIKTEX_ASSUME(expr)
140#if defined(MIKTEX_DEBUG)
141# define MIKTEX_ASSERT_VALID_HEAP() MiKTeX::Debug::AssertValidHeap()
143# define MIKTEX_ASSERT_VALID_HEAP()
146#if defined(MIKTEX_DEBUG)
147# define MIKTEX_ASSERT_VALID_HEAP_POINTER_OR_NIL(ptr) \
148 if (ptr != nullptr) \
150 MiKTeX::Debug::AssertValidHeapPointer(ptr); \
153# define MIKTEX_ASSERT_VALID_HEAP_POINTER_OR_NIL(ptr)
156#if defined(MIKTEX_DEBUG)
157# define MIKTEX_ASSERT_BUFFER(ptr, n) MiKTeX::Debug::AssertValidBuf(ptr, n)
159# define MIKTEX_ASSERT_BUFFER(ptr, n)
162#if defined(MIKTEX_DEBUG)
163# define MIKTEX_ASSERT_BUFFER_OR_NIL(ptr, n) \
164 if (ptr != nullptr) \
166 MiKTeX::Debug::AssertValidBuf(ptr, n); \
169# define MIKTEX_ASSERT_BUFFER_OR_NIL(ptr, n)
172#if defined(MIKTEX_DEBUG)
173# define MIKTEX_ASSERT_CHAR_BUFFER(ptr, n) \
174 MiKTeX::Debug::AssertValidBuf(ptr, sizeof(ptr[0]) * (n))
176# define MIKTEX_ASSERT_CHAR_BUFFER(ptr, n)
179#if defined(MIKTEX_DEBUG)
180# define MIKTEX_ASSERT_CHAR_BUFFER_OR_NIL(ptr, n) \
181 if (ptr != nullptr) \
183 MiKTeX::Debug::AssertValidBuf(ptr, sizeof(ptr[0]) * (n)); \
186# define MIKTEX_ASSERT_CHAR_BUFFER_OR_NIL(ptr, n)
189#if defined(MIKTEX_DEBUG)
190# define MIKTEX_ASSERT_STRING(ptr) MiKTeX::Debug::AssertValidString(ptr)
192# define MIKTEX_ASSERT_STRING(ptr)
195#if defined(MIKTEX_DEBUG)
196# define MIKTEX_ASSERT_STRING_OR_NIL(ptr) \
197 if (ptr != nullptr) \
199 MiKTeX::Debug::AssertValidString(ptr); \
202# define MIKTEX_ASSERT_STRING_OR_NIL(ptr)
205# define MIKTEX_ASSERT_PATH_BUFFER(ptr) \
206 MIKTEX_ASSERT_CHAR_BUFFER (ptr, MiKTeX::Core::BufferSizes::MaxPath)
208# define MIKTEX_ASSERT_PATH_BUFFER_OR_NIL(ptr) \
209 MIKTEX_ASSERT_CHAR_BUFFER_OR_NIL (ptr, MiKTeX::Core::BufferSizes::MaxPath)
211# define MIKTEX_ASSERT_FNAME_BUFFER(ptr) \
212 MIKTEX_ASSERT_CHAR_BUFFER (ptr, MiKTeX::Core::BufferSizes::MaxPath)
214#if defined(__cplusplus)
215MIKTEX_DEBUG_BEGIN_NAMESPACE;
217inline void AssertValidBuf(
void* ptr, std::size_t n)
219 MIKTEX_ASSERT(ptr !=
nullptr);
220#if defined(MIKTEX_DEBUG)
225MIKTEX_DEBUG_END_NAMESPACE;
228#if defined(__cplusplus)
229MIKTEX_DEBUG_BEGIN_NAMESPACE;
231inline void AssertValidString(
const char* ptr, std::size_t n = 4096)
233 MIKTEX_ASSERT(ptr !=
nullptr);
234#if defined(MIKTEX_DEBUG)
239inline void AssertValidString(
const wchar_t* ptr, std::size_t n = 4096)
241 MIKTEX_ASSERT(ptr !=
nullptr);
242#if defined(MIKTEX_DEBUG)
247MIKTEX_DEBUG_END_NAMESPACE;
250#if defined(__cplusplus)
251MIKTEX_DEBUG_BEGIN_NAMESPACE;
253inline void AssertValidHeap()
257 MIKTEX_ASSERT(_CrtCheckMemory());
258# elif defined(MIKTEX_DEBUG)
260 MIKTEX_ASSERT((heapStatus = _heapchk()) == _HEAPOK || (heapStatus == _HEAPEMPTY));
265MIKTEX_DEBUG_END_NAMESPACE;
268#if defined(__cplusplus)
269MIKTEX_DEBUG_BEGIN_NAMESPACE;
271inline void AssertValidHeapPointer(
const void* ptr)
275 MIKTEX_ASSERT(_CrtIsValidHeapPointer(ptr));
280MIKTEX_DEBUG_END_NAMESPACE;
Definition Exceptions.h:38