00001 #ifndef foomemoryhfoo
00002 #define foomemoryhfoo
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025 #include <sys/types.h>
00026 #include <stdlib.h>
00027 #include <limits.h>
00028 #include <assert.h>
00029
00030 #include <pulse/cdecl.h>
00031 #include <pulse/gccmacro.h>
00032 #include <pulse/version.h>
00033
00038 PA_C_DECL_BEGIN
00039
00041 void* pa_xmalloc(size_t l) PA_GCC_MALLOC PA_GCC_ALLOC_SIZE(1);
00042
00044 void *pa_xmalloc0(size_t l) PA_GCC_MALLOC PA_GCC_ALLOC_SIZE(1);
00045
00047 void *pa_xrealloc(void *ptr, size_t size) PA_GCC_ALLOC_SIZE(2);
00048
00050 void pa_xfree(void *p);
00051
00053 char *pa_xstrdup(const char *s) PA_GCC_MALLOC;
00054
00056 char *pa_xstrndup(const char *s, size_t l) PA_GCC_MALLOC;
00057
00059 void* pa_xmemdup(const void *p, size_t l) PA_GCC_MALLOC PA_GCC_ALLOC_SIZE(2);
00060
00062 static void* _pa_xnew_internal(size_t n, size_t k) PA_GCC_MALLOC PA_GCC_ALLOC_SIZE2(1,2);
00063
00064 static inline void* _pa_xnew_internal(size_t n, size_t k) {
00065 assert(n < INT_MAX/k);
00066 return pa_xmalloc(n*k);
00067 }
00068
00070 #define pa_xnew(type, n) ((type*) _pa_xnew_internal((n), sizeof(type)))
00071
00073 static void* _pa_xnew0_internal(size_t n, size_t k) PA_GCC_MALLOC PA_GCC_ALLOC_SIZE2(1,2);
00074
00075 static inline void* _pa_xnew0_internal(size_t n, size_t k) {
00076 assert(n < INT_MAX/k);
00077 return pa_xmalloc0(n*k);
00078 }
00079
00081 #define pa_xnew0(type, n) ((type*) _pa_xnew0_internal((n), sizeof(type)))
00082
00084 static void* _pa_xnewdup_internal(const void *p, size_t n, size_t k) PA_GCC_MALLOC PA_GCC_ALLOC_SIZE2(2,3);
00085
00086 static inline void* _pa_xnewdup_internal(const void *p, size_t n, size_t k) {
00087 assert(n < INT_MAX/k);
00088 return pa_xmemdup(p, n*k);
00089 }
00090
00092 #define pa_xnewdup(type, p, n) ((type*) _pa_xnewdup_internal((p), (n), sizeof(type)))
00093
00094 PA_C_DECL_END
00095
00096 #endif