18#ifndef MAGICKCORE_MEMORY_H
19#define MAGICKCORE_MEMORY_H
24# if !defined(SSIZE_MAX)
25# define SSIZE_MAX LLONG_MAX
28# if !defined(SSIZE_MAX)
29# define SSIZE_MAX LONG_MAX
33#define MAGICK_INT_MAX (INT_MAX)
34#define MAGICK_PTRDIFF_MAX (PTRDIFF_MAX)
35#define MAGICK_PTRDIFF_MIN (-PTRDIFF_MAX-1)
36#define MAGICK_SIZE_MAX (SIZE_MAX)
37#define MAGICK_SSIZE_MAX (SSIZE_MAX)
38#define MAGICK_SSIZE_MIN (-SSIZE_MAX-1)
39#define MAGICK_UCHAR_MAX (UCHAR_MAX)
40#define MAGICK_UINT_MAX (UINT_MAX)
41#define MAGICK_ULONG_MAX (ULONG_MAX)
42#define MAGICK_USHORT_MAX (USHRT_MAX)
44#if defined(__cplusplus) || defined(c_plusplus)
52 *(*AcquireMemoryHandler)(size_t) magick_alloc_size(1),
53 (*DestroyMemoryHandler)(
void *),
54 *(*ResizeMemoryHandler)(
void *,size_t) magick_alloc_size(2),
55 *(*AcquireAlignedMemoryHandler)(
const size_t,
const size_t),
56 (*RelinquishAlignedMemoryHandler)(
void *);
58extern MagickExport MemoryInfo
59 *AcquireVirtualMemory(
const size_t,
const size_t) magick_alloc_sizes(1,2),
60 *RelinquishVirtualMemory(MemoryInfo *);
62extern MagickExport
size_t
63 GetMaxMemoryRequest(
void),
64 GetMaxProfileSize(
void);
66extern MagickExport
void
67 *AcquireAlignedMemory(
const size_t,
const size_t)
68 magick_attribute((__malloc__)) magick_alloc_sizes(1,2),
69 *AcquireMagickMemory(
const size_t) magick_attribute((__malloc__))
71 *AcquireCriticalMemory(
const size_t),
72 *AcquireQuantumMemory(
const size_t,
const size_t)
73 magick_attribute((__malloc__)) magick_alloc_sizes(1,2),
74 *CopyMagickMemory(
void *magick_restrict,
const void *magick_restrict,
75 const size_t) magick_attribute((__nonnull__)),
76 DestroyMagickMemory(
void),
77 GetMagickMemoryMethods(AcquireMemoryHandler *,ResizeMemoryHandler *,
78 DestroyMemoryHandler *),
79 *GetVirtualMemoryBlob(
const MemoryInfo *),
80 *RelinquishAlignedMemory(
void *),
81 *RelinquishMagickMemory(
void *),
82 *ResetMagickMemory(
void *,
int,
const size_t),
83 *ResizeMagickMemory(
void *,
const size_t)
84 magick_attribute((__malloc__)) magick_alloc_size(2),
85 *ResizeQuantumMemory(
void *,
const size_t,
const size_t)
86 magick_attribute((__malloc__)) magick_alloc_sizes(2,3),
87 SetMagickAlignedMemoryMethods(AcquireAlignedMemoryHandler,
88 RelinquishAlignedMemoryHandler),
89 SetMagickMemoryMethods(AcquireMemoryHandler,ResizeMemoryHandler,
90 DestroyMemoryHandler);
92static inline MagickBooleanType HeapOverflowSanityCheck(
93 const size_t count,
const size_t quantum)
95 if ((count == 0) || (quantum == 0))
97 if (count > (MAGICK_SIZE_MAX/quantum))
105static inline MagickBooleanType HeapOverflowSanityCheckGetSize(
106 const size_t count,
const size_t quantum,
size_t *
const extent)
108 if ((count == 0) || (quantum == 0))
110 if (count > (MAGICK_SIZE_MAX/quantum))
116 *extent=count*quantum;
120#if defined(__cplusplus) || defined(c_plusplus)