Home | History | Annotate | Download | only in libutil
      1 /**
      2  * @file op_libiberty.h
      3  * Wrapper for libiberty - always use this instead of
      4  * libiberty.h
      5  *
      6  * @remark Copyright 2002 OProfile authors
      7  * @remark Read the file COPYING
      8  *
      9  * @author John Levon
     10  * @author Philippe Elie
     11  */
     12 
     13 #ifndef OP_LIBIBERTY_H
     14 #define OP_LIBIBERTY_H
     15 
     16 #include <stddef.h>
     17 
     18 #include "config.h"
     19 
     20 #ifdef MALLOC_ATTRIBUTE_OK
     21 #define OP_ATTRIB_MALLOC	__attribute__((malloc))
     22 #else
     23 #define OP_ATTRIB_MALLOC
     24 #endif
     25 
     26 #ifdef HAVE_LIBIBERTY_H
     27 #include <libiberty.h>
     28 #else
     29 
     30 #ifdef __cplusplus
     31 extern "C" {
     32 #endif
     33 
     34 /* some system have a libiberty.a but no libiberty.h so we must provide
     35  * ourself the missing proto */
     36 #ifndef HAVE_LIBIBERTY_H
     37 /* Set the program name used by xmalloc.  */
     38 void xmalloc_set_program_name(char const *);
     39 
     40 /* Allocate memory without fail.  If malloc fails, this will print a
     41    message to stderr (using the name set by xmalloc_set_program_name,
     42    if any) and then call xexit.  */
     43 void * xmalloc(size_t) OP_ATTRIB_MALLOC;
     44 
     45 /* Reallocate memory without fail.  This works like xmalloc.  Note,
     46    realloc type functions are not suitable for attribute malloc since
     47    they may return the same address across multiple calls. */
     48 void * xrealloc(void *, size_t);
     49 
     50 /* Allocate memory without fail and set it to zero.  This works like xmalloc */
     51 void * xcalloc(size_t, size_t) OP_ATTRIB_MALLOC;
     52 
     53 /* Copy a string into a memory buffer without fail.  */
     54 char * xstrdup(char const *) OP_ATTRIB_MALLOC;
     55 
     56 /**
     57  * Duplicates a region of memory without fail.  First, alloc_size bytes
     58  * are allocated, then copy_size bytes from input are copied into
     59  * it, and the new memory is returned.  If fewer bytes are copied than were
     60  * allocated, the remaining memory is zeroed.
     61  */
     62 void * xmemdup(void const *, size_t, size_t) OP_ATTRIB_MALLOC;
     63 
     64 #endif	/* !HAVE_LIBIBERTY_H */
     65 
     66 #ifdef ANDROID
     67 #define xmalloc(s)      malloc(s)
     68 #define xrealloc(p,s)   realloc(p,s)
     69 #define xstrdup(str)    strdup(str)
     70 #define xmalloc_set_program_name(n)
     71 #endif
     72 
     73 #ifdef __cplusplus
     74 }
     75 #endif
     76 
     77 #endif /* !HAVE_LIBIBERTY_H */
     78 
     79 #endif /* OP_LIBIBERTY_H */
     80