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