Ruby 3.0.5p211 (2022-11-24 revision ba5cf0f7c52d4d35cc6a173c89eda98ceffa2dcf)
xmalloc.h
Go to the documentation of this file.
1#ifndef RBIMPL_XMALLOC_H /*-*-C++-*-vi:se ft=cpp:*/
2#define RBIMPL_XMALLOC_H
24
25#ifdef STDC_HEADERS
26# include <stddef.h>
27#endif
28
29#ifdef HAVE_STDLIB_H
30# include <stdlib.h>
31#endif
32
39
40#ifndef USE_GC_MALLOC_OBJ_INFO_DETAILS
41# define USE_GC_MALLOC_OBJ_INFO_DETAILS 0
42#endif
43
44#define xmalloc ruby_xmalloc
45#define xmalloc2 ruby_xmalloc2
46#define xcalloc ruby_xcalloc
47#define xrealloc ruby_xrealloc
48#define xrealloc2 ruby_xrealloc2
49#define xfree ruby_xfree
50
52
77void *ruby_xmalloc(size_t size)
79;
80
108void *ruby_xmalloc2(size_t nelems, size_t elemsiz)
109RBIMPL_ATTR_NOEXCEPT(malloc(nelems * elemsiz))
110;
111
137void *ruby_xcalloc(size_t nelems, size_t elemsiz)
138RBIMPL_ATTR_NOEXCEPT(calloc(nelems, elemsiz))
139;
140
177void *ruby_xrealloc(void *ptr, size_t newsiz)
179;
180
229void *ruby_xrealloc2(void *ptr, size_t newelems, size_t newsiz)
230RBIMPL_ATTR_NOEXCEPT(realloc(ptr, newelems * newsiz))
231;
232
252void ruby_xfree(void *ptr)
254;
255
256#if USE_GC_MALLOC_OBJ_INFO_DETAILS || defined(__DOXYGEN)
257# define ruby_xmalloc(s1) ruby_xmalloc_with_location(s1, __FILE__, __LINE__)
258# define ruby_xmalloc2(s1, s2) ruby_xmalloc2_with_location(s1, s2, __FILE__, __LINE__)
259# define ruby_xcalloc(s1, s2) ruby_xcalloc_with_location(s1, s2, __FILE__, __LINE__)
260# define ruby_xrealloc(ptr, s1) ruby_xrealloc_with_location(ptr, s1, __FILE__, __LINE__)
261# define ruby_xrealloc2(ptr, s1, s2) ruby_xrealloc2_with_location(ptr, s1, s2, __FILE__, __LINE__)
262
267void *ruby_xmalloc_body(size_t size)
269;
270
275void *ruby_xmalloc2_body(size_t nelems, size_t elemsiz)
276RBIMPL_ATTR_NOEXCEPT(malloc(nelems * elemsiz))
277;
278
283void *ruby_xcalloc_body(size_t nelems, size_t elemsiz)
284RBIMPL_ATTR_NOEXCEPT(calloc(nelems, elemsiz))
285;
286
290void *ruby_xrealloc_body(void *ptr, size_t newsiz)
292;
293
297void *ruby_xrealloc2_body(void *ptr, size_t newelems, size_t newsiz)
298RBIMPL_ATTR_NOEXCEPT(realloc(ptr, newelems * newsiz))
299;
300
301RUBY_EXTERN const char *ruby_malloc_info_file;
302RUBY_EXTERN int ruby_malloc_info_line;
303
304static inline void *
305ruby_xmalloc_with_location(size_t s, const char *file, int line)
306{
307 void *ptr;
308 ruby_malloc_info_file = file;
309 ruby_malloc_info_line = line;
311 ruby_malloc_info_file = NULL;
312 return ptr;
313}
314
315static inline void *
316ruby_xmalloc2_with_location(size_t s1, size_t s2, const char *file, int line)
317{
318 void *ptr;
319 ruby_malloc_info_file = file;
320 ruby_malloc_info_line = line;
321 ptr = ruby_xmalloc2_body(s1, s2);
322 ruby_malloc_info_file = NULL;
323 return ptr;
324}
325
326static inline void *
327ruby_xcalloc_with_location(size_t s1, size_t s2, const char *file, int line)
328{
329 void *ptr;
330 ruby_malloc_info_file = file;
331 ruby_malloc_info_line = line;
332 ptr = ruby_xcalloc_body(s1, s2);
333 ruby_malloc_info_file = NULL;
334 return ptr;
335}
336
337static inline void *
338ruby_xrealloc_with_location(void *ptr, size_t s, const char *file, int line)
339{
340 void *rptr;
341 ruby_malloc_info_file = file;
342 ruby_malloc_info_line = line;
343 rptr = ruby_xrealloc_body(ptr, s);
344 ruby_malloc_info_file = NULL;
345 return rptr;
346}
347
348static inline void *
349ruby_xrealloc2_with_location(void *ptr, size_t s1, size_t s2, const char *file, int line)
350{
351 void *rptr;
352 ruby_malloc_info_file = file;
353 ruby_malloc_info_line = line;
354 rptr = ruby_xrealloc2_body(ptr, s1, s2);
355 ruby_malloc_info_file = NULL;
356 return rptr;
357}
358#endif
359
361
362#endif /* RBIMPL_XMALLOC_H */
Defines RBIMPL_ATTR_ALLOC_SIZE.
#define RBIMPL_ATTR_ALLOC_SIZE(tuple)
Wraps (or simulates) __attribute__((alloc_size))
Definition: alloc_size.h:29
struct RIMemo * ptr
Definition: debug.c:88
Tewaking visibility of C variables/functions.
#define RUBY_EXTERN
Definition: dllexport.h:36
#define RBIMPL_SYMBOL_EXPORT_END()
Counterpart of RBIMPL_SYMBOL_EXPORT_BEGIN.
Definition: dllexport.h:86
#define RBIMPL_SYMBOL_EXPORT_BEGIN()
Shortcut macro equivalent to RUBY_SYMBOL_EXPORT_BEGIN extern "C" {.
Definition: dllexport.h:77
#define free(x)
Definition: dln.c:52
void * ruby_xmalloc2_body(size_t n, size_t size)
Definition: gc.c:10846
void * ruby_xrealloc_body(void *ptr, size_t new_size)
Definition: gc.c:10881
void * ruby_xmalloc_body(size_t size)
Definition: gc.c:10829
void * ruby_xcalloc_body(size_t n, size_t size)
Definition: gc.c:10862
void * ruby_xrealloc2_body(void *ptr, size_t n, size_t size)
Definition: gc.c:10897
Thin wrapper to ruby/config.h.
voidpf void uLong size
Definition: ioapi.h:138
Defines RBIMPL_ATTR_NODISCARD.
#define RBIMPL_ATTR_NODISCARD()
Wraps (or simulates) [[nodiscard]].
Definition: nodiscard.h:42
Defines RBIMPL_ATTR_NOEXCEPT.
#define RBIMPL_ATTR_NOEXCEPT(_)
Wraps (or simulates) C++11 noexcept
Definition: noexcept.h:85
#define NULL
Definition: regenc.h:69
Defines RBIMPL_ATTR_RESTRICT.
#define RBIMPL_ATTR_RESTRICT()
Wraps (or simulates) __declspec(restrict)
Definition: restrict.h:42
Defines RBIMPL_ATTR_RETURNS_NONNULL.
#define RBIMPL_ATTR_RETURNS_NONNULL()
Wraps (or simulates) __attribute__((returns_nonnull))
#define realloc
Definition: st.c:172
#define calloc
Definition: st.c:171
#define malloc
Definition: st.c:170
#define const
Definition: strftime.c:108
Definition: gzappend.c:170
void * ruby_xrealloc(void *ptr, size_t newsiz)
Resize the storage instance.
Definition: gc.c:12825
void * ruby_xrealloc2(void *ptr, size_t newelems, size_t newsiz)
Identical to ruby_xrealloc(), except it resizes the given storage instance to newelems * newsiz bytes...
Definition: gc.c:12835
void ruby_xfree(void *ptr)
Deallocates a storage instance.
Definition: gc.c:10914
void * ruby_xmalloc2(size_t nelems, size_t elemsiz)
Identical to ruby_xmalloc(), except it allocates nelems * elemsiz bytes.
Definition: gc.c:12805
void * ruby_xmalloc(size_t size)
Allocates a storage instance.
Definition: gc.c:12795
void * ruby_xcalloc(size_t nelems, size_t elemsiz)
Identical to ruby_xmalloc2(), except it zero-fills the region before it returns.
Definition: gc.c:12815