strace/xmalloc.h
Dmitry V. Levin b93d52fe3d Change the license of strace to LGPL-2.1-or-later
strace is now provided under the terms of the GNU Lesser General
Public License version 2.1 or later, see COPYING for more details.

strace test suite is now provided under the terms of the GNU General
Public License version 2 or later, see tests/COPYING for more details.
2018-12-10 00:00:00 +00:00

55 lines
2.1 KiB
C

/*
* This file contains wrapper functions working with memory allocations,
* they just terminate the program in case of memory allocation failure.
* These functions can be used by various binaries included in the strace
* package.
*
* Copyright (c) 2001-2017 The strace developers.
* All rights reserved.
*
* SPDX-License-Identifier: LGPL-2.1-or-later
*/
#ifndef STRACE_XMALLOC_H
#define STRACE_XMALLOC_H
#include <stddef.h>
#include "gcc_compat.h"
#define xcalloc strace_calloc
#define xmalloc strace_malloc
void *xcalloc(size_t nmemb, size_t size)
ATTRIBUTE_MALLOC ATTRIBUTE_ALLOC_SIZE((1, 2));
void *xmalloc(size_t size) ATTRIBUTE_MALLOC ATTRIBUTE_ALLOC_SIZE((1));
void *xreallocarray(void *ptr, size_t nmemb, size_t size)
ATTRIBUTE_ALLOC_SIZE((2, 3));
/**
* Utility function for the simplification of managing various dynamic arrays.
* Knows better how to resize arrays. Dies if there's no enough memory.
*
* @param[in] ptr Pointer to the array to be resized. If ptr is NULL,
* new array is allocated.
* @param[in, out] nmemb Pointer to the current member count. If ptr is
* NULL, it specifies number of members in the newly
* created array. If ptr is NULL and nmemb is 0,
* number of members in the new array is decided by
* the function. Member count is updated by the
* function to the new value.
* @param[in] memb_size Size of array member in bytes.
* @return Pointer to the (re)allocated array.
*/
void *xgrowarray(void *ptr, size_t *nmemb, size_t memb_size);
/*
* Note that the following two functions return NULL when NULL is specified
* and not when allocation is failed, since, as the "x" prefix implies,
* the allocation failure leads to program termination, so we may re-purpose
* this return value and simplify the idiom "str ? xstrdup(str) : NULL".
*/
char *xstrdup(const char *str) ATTRIBUTE_MALLOC;
char *xstrndup(const char *str, size_t n) ATTRIBUTE_MALLOC;
#endif /* !STRACE_XMALLOC_H */