blob: ef2f38632837b886f7720b52c128cc8670ca54c7 [file] [log] [blame]
The Android Open Source Project10e23ee2009-03-03 19:30:30 -08001/**
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
31extern "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
The Android Open Source Project10e23ee2009-03-03 19:30:30 -080037/* Set the program name used by xmalloc. */
38void 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. */
43void * 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. */
48void * xrealloc(void *, size_t);
49
50/* Allocate memory without fail and set it to zero. This works like xmalloc */
51void * xcalloc(size_t, size_t) OP_ATTRIB_MALLOC;
52
53/* Copy a string into a memory buffer without fail. */
54char * 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 */
62void * 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
The Android Open Source Project10e23ee2009-03-03 19:30:30 -080073#ifdef __cplusplus
74}
75#endif
76
77#endif /* !HAVE_LIBIBERTY_H */
78
79#endif /* OP_LIBIBERTY_H */