/** * @file op_libiberty.h * Wrapper for libiberty - always use this instead of * libiberty.h * * @remark Copyright 2002 OProfile authors * @remark Read the file COPYING * * @author John Levon * @author Philippe Elie */ #ifndef OP_LIBIBERTY_H #define OP_LIBIBERTY_H #include <stddef.h> #include "config.h" #ifdef MALLOC_ATTRIBUTE_OK #define OP_ATTRIB_MALLOC __attribute__((malloc)) #else #define OP_ATTRIB_MALLOC #endif #ifdef HAVE_LIBIBERTY_H #include <libiberty.h> #else #ifdef __cplusplus extern "C" { #endif /* some system have a libiberty.a but no libiberty.h so we must provide * ourself the missing proto */ #ifndef HAVE_LIBIBERTY_H /* Set the program name used by xmalloc. */ void xmalloc_set_program_name(char const *); /* Allocate memory without fail. If malloc fails, this will print a message to stderr (using the name set by xmalloc_set_program_name, if any) and then call xexit. */ void * xmalloc(size_t) OP_ATTRIB_MALLOC; /* Reallocate memory without fail. This works like xmalloc. Note, realloc type functions are not suitable for attribute malloc since they may return the same address across multiple calls. */ void * xrealloc(void *, size_t); /* Allocate memory without fail and set it to zero. This works like xmalloc */ void * xcalloc(size_t, size_t) OP_ATTRIB_MALLOC; /* Copy a string into a memory buffer without fail. */ char * xstrdup(char const *) OP_ATTRIB_MALLOC; /** * Duplicates a region of memory without fail. First, alloc_size bytes * are allocated, then copy_size bytes from input are copied into * it, and the new memory is returned. If fewer bytes are copied than were * allocated, the remaining memory is zeroed. */ void * xmemdup(void const *, size_t, size_t) OP_ATTRIB_MALLOC; #endif /* !HAVE_LIBIBERTY_H */ #ifdef ANDROID #define xmalloc(s) malloc(s) #define xrealloc(p,s) realloc(p,s) #define xstrdup(str) strdup(str) #define xmalloc_set_program_name(n) #endif #ifdef __cplusplus } #endif #endif /* !HAVE_LIBIBERTY_H */ #endif /* OP_LIBIBERTY_H */