110e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project/**
210e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project * @file op_libiberty.h
310e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project * Wrapper for libiberty - always use this instead of
410e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project * libiberty.h
510e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project *
610e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project * @remark Copyright 2002 OProfile authors
710e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project * @remark Read the file COPYING
810e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project *
910e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project * @author John Levon
1010e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project * @author Philippe Elie
1110e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project */
1210e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project
1310e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project#ifndef OP_LIBIBERTY_H
1410e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project#define OP_LIBIBERTY_H
1510e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project
1610e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project#include <stddef.h>
1710e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project
1810e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project#include "config.h"
1910e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project
2010e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project#ifdef MALLOC_ATTRIBUTE_OK
2110e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project#define OP_ATTRIB_MALLOC	__attribute__((malloc))
2210e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project#else
2310e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project#define OP_ATTRIB_MALLOC
2410e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project#endif
2510e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project
2610e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project#ifdef HAVE_LIBIBERTY_H
2710e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project#include <libiberty.h>
2810e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project#else
2910e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project
3010e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project#ifdef __cplusplus
3110e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Projectextern "C" {
3210e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project#endif
3310e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project
3410e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project/* some system have a libiberty.a but no libiberty.h so we must provide
3510e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project * ourself the missing proto */
3610e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project#ifndef HAVE_LIBIBERTY_H
3710e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project/* Set the program name used by xmalloc.  */
3810e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Projectvoid xmalloc_set_program_name(char const *);
3910e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project
4010e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project/* Allocate memory without fail.  If malloc fails, this will print a
4110e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project   message to stderr (using the name set by xmalloc_set_program_name,
4210e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project   if any) and then call xexit.  */
4310e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Projectvoid * xmalloc(size_t) OP_ATTRIB_MALLOC;
4410e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project
4510e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project/* Reallocate memory without fail.  This works like xmalloc.  Note,
4610e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project   realloc type functions are not suitable for attribute malloc since
4710e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project   they may return the same address across multiple calls. */
4810e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Projectvoid * xrealloc(void *, size_t);
4910e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project
5010e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project/* Allocate memory without fail and set it to zero.  This works like xmalloc */
5110e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Projectvoid * xcalloc(size_t, size_t) OP_ATTRIB_MALLOC;
5210e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project
5310e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project/* Copy a string into a memory buffer without fail.  */
5410e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Projectchar * xstrdup(char const *) OP_ATTRIB_MALLOC;
5510e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project
5610e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project/**
5710e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project * Duplicates a region of memory without fail.  First, alloc_size bytes
5810e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project * are allocated, then copy_size bytes from input are copied into
5910e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project * it, and the new memory is returned.  If fewer bytes are copied than were
6010e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project * allocated, the remaining memory is zeroed.
6110e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project */
6210e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Projectvoid * xmemdup(void const *, size_t, size_t) OP_ATTRIB_MALLOC;
6310e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project
6410e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project#endif	/* !HAVE_LIBIBERTY_H */
6510e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project
6610e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project#ifdef ANDROID
6710e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project#define xmalloc(s)      malloc(s)
6810e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project#define xrealloc(p,s)   realloc(p,s)
6910e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project#define xstrdup(str)    strdup(str)
7010e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project#define xmalloc_set_program_name(n)
7110e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project#endif
7210e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project
7310e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project#ifdef __cplusplus
7410e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project}
7510e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project#endif
7610e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project
7710e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project#endif /* !HAVE_LIBIBERTY_H */
7810e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project
7910e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project#endif /* OP_LIBIBERTY_H */
80