18#ifndef MAGICKCORE_MEMORY_H
19#define MAGICKCORE_MEMORY_H
23#define MAGICK_INT_MAX (INT_MAX)
24#define MAGICK_PTRDIFF_MAX (PTRDIFF_MAX)
25#define MAGICK_PTRDIFF_MIN (-PTRDIFF_MAX-1)
26#define MAGICK_SIZE_MAX (SIZE_MAX)
27#define MAGICK_SSIZE_MAX (SSIZE_MAX)
28#define MAGICK_SSIZE_MIN (-SSIZE_MAX-1)
29#define MAGICK_UCHAR_MAX (UCHAR_MAX)
30#define MAGICK_UINT_MAX (UINT_MAX)
31#define MAGICK_ULONG_MAX (ULONG_MAX)
32#define MAGICK_USHORT_MAX (USHRT_MAX)
34#if defined(__cplusplus) || defined(c_plusplus)
42 *(*AcquireMemoryHandler)(size_t) magick_alloc_size(1),
43 (*DestroyMemoryHandler)(
void *),
44 *(*ResizeMemoryHandler)(
void *,size_t) magick_alloc_size(2),
45 *(*AcquireAlignedMemoryHandler)(
const size_t,
const size_t),
46 (*RelinquishAlignedMemoryHandler)(
void *);
48extern MagickExport MemoryInfo
49 *AcquireVirtualMemory(
const size_t,
const size_t) magick_alloc_sizes(1,2),
50 *RelinquishVirtualMemory(MemoryInfo *);
52extern MagickExport
size_t
53 GetMaxMemoryRequest(
void),
54 GetMaxProfileSize(
void);
56extern MagickExport
void
57 *AcquireAlignedMemory(
const size_t,
const size_t)
58 magick_attribute((__malloc__)) magick_alloc_sizes(1,2),
59 *AcquireMagickMemory(
const size_t) magick_attribute((__malloc__))
61 *AcquireCriticalMemory(
const size_t),
62 *AcquireQuantumMemory(
const size_t,
const size_t)
63 magick_attribute((__malloc__)) magick_alloc_sizes(1,2),
64 *CopyMagickMemory(
void *magick_restrict,
const void *magick_restrict,
65 const size_t) magick_attribute((__nonnull__)),
66 DestroyMagickMemory(
void),
67 GetMagickMemoryMethods(AcquireMemoryHandler *,ResizeMemoryHandler *,
68 DestroyMemoryHandler *),
69 *GetVirtualMemoryBlob(
const MemoryInfo *),
70 *RelinquishAlignedMemory(
void *),
71 *RelinquishMagickMemory(
void *),
72 *ResetMagickMemory(
void *,
int,
const size_t),
73 *ResizeMagickMemory(
void *,
const size_t)
74 magick_attribute((__malloc__)) magick_alloc_size(2),
75 *ResizeQuantumMemory(
void *,
const size_t,
const size_t)
76 magick_attribute((__malloc__)) magick_alloc_sizes(2,3),
77 SetMagickAlignedMemoryMethods(AcquireAlignedMemoryHandler,
78 RelinquishAlignedMemoryHandler),
79 SetMagickMemoryMethods(AcquireMemoryHandler,ResizeMemoryHandler,
80 DestroyMemoryHandler);
82static inline MagickBooleanType HeapOverflowSanityCheck(
83 const size_t count,
const size_t quantum)
85 if ((count == 0) || (quantum == 0))
87 if (count > (MAGICK_SIZE_MAX/quantum))
95static inline MagickBooleanType HeapOverflowSanityCheckGetSize(
96 const size_t count,
const size_t quantum,
size_t *
const extent)
98 if ((count == 0) || (quantum == 0))
100 if (count > (MAGICK_SIZE_MAX/quantum))
106 *extent=count*quantum;
110#if defined(__cplusplus) || defined(c_plusplus)