summaryrefslogtreecommitdiff
path: root/src/shared.h
blob: fef19cae855451d73142aaf243d6e8fd943040cc (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
#ifndef __VXGG_REWRITE___SHARED_H___3880294315821___
#define __VXGG_REWRITE___SHARED_H___3880294315821___

#include <stddef.h>
#include <stdarg.h>

// Defines how `x___alloc()` functions should exit. `___VXGG___XCALLOC_EXIT_ON_ERROR___ > 0` calls `error()`, and thus functions
// registered with `atexit()` and `on_exit()`. `___VXGG___XCALLOC_EXIT_ON_ERROR___ <= 0` calls `abort()` on error. `xcalloc()` 
// will ALWAYS 'abort', doing otherwise defeats the purpose of the function
#define ___VXGG___XCALLOC_EXIT_ON_ERROR___ 1

// `calloc()` with error checking. Calls `error()` or `abort()` on error, depending on the value of `___VXGG___XCALLOC_EXIT_ON_ERROR___`
void* xcalloc(size_t nmemb, size_t size);

// `reallocarray()` with error checking. Calls `error()` or `abort()` on error, depending on the value of `___VXGG___XCALLOC_EXIT_ON_ERROR___`
void* xreallocarray(void *ptr, size_t nmemb, size_t size);

// `vsprintf()`, but reallocates enough room for the resulting string before writing to `str`
int vsaprintf(char **str, const char *format, va_list ap);

// `sprintf()`, but reallocates enough room for the resulting string before writing to `str`
int saprintf(char **str, const char *format, ...);

#endif