PulseAudio  5.0
xmalloc.h
Go to the documentation of this file.
1 #ifndef foomemoryhfoo
2 #define foomemoryhfoo
3 
4 /***
5  This file is part of PulseAudio.
6 
7  Copyright 2004-2006 Lennart Poettering
8 
9  PulseAudio is free software; you can redistribute it and/or modify
10  it under the terms of the GNU Lesser General Public License as published
11  by the Free Software Foundation; either version 2.1 of the License,
12  or (at your option) any later version.
13 
14  PulseAudio is distributed in the hope that it will be useful, but
15  WITHOUT ANY WARRANTY; without even the implied warranty of
16  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
17  General Public License for more details.
18 
19  You should have received a copy of the GNU Lesser General Public License
20  along with PulseAudio; if not, write to the Free Software
21  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
22  USA.
23 ***/
24 
25 #include <sys/types.h>
26 #include <stdlib.h>
27 #include <limits.h>
28 #include <assert.h>
29 
30 #include <pulse/cdecl.h>
31 #include <pulse/gccmacro.h>
32 #include <pulse/version.h>
33 
38 PA_C_DECL_BEGIN
39 
41 void* pa_xmalloc(size_t l) PA_GCC_MALLOC PA_GCC_ALLOC_SIZE(1);
42 
45 
47 void *pa_xrealloc(void *ptr, size_t size) PA_GCC_ALLOC_SIZE(2);
48 
50 void pa_xfree(void *p);
51 
53 char *pa_xstrdup(const char *s) PA_GCC_MALLOC;
54 
56 char *pa_xstrndup(const char *s, size_t l) PA_GCC_MALLOC;
57 
59 void* pa_xmemdup(const void *p, size_t l) PA_GCC_MALLOC PA_GCC_ALLOC_SIZE(2);
60 
62 static void* _pa_xnew_internal(size_t n, size_t k) PA_GCC_MALLOC PA_GCC_ALLOC_SIZE2(1,2);
63 
64 static inline void* _pa_xnew_internal(size_t n, size_t k) {
65  assert(n < INT_MAX/k);
66  return pa_xmalloc(n*k);
67 }
68 
70 #define pa_xnew(type, n) ((type*) _pa_xnew_internal((n), sizeof(type)))
71 
73 static void* _pa_xnew0_internal(size_t n, size_t k) PA_GCC_MALLOC PA_GCC_ALLOC_SIZE2(1,2);
74 
75 static inline void* _pa_xnew0_internal(size_t n, size_t k) {
76  assert(n < INT_MAX/k);
77  return pa_xmalloc0(n*k);
78 }
79 
81 #define pa_xnew0(type, n) ((type*) _pa_xnew0_internal((n), sizeof(type)))
82 
84 static void* _pa_xnewdup_internal(const void *p, size_t n, size_t k) PA_GCC_MALLOC PA_GCC_ALLOC_SIZE2(2,3);
85 
86 static inline void* _pa_xnewdup_internal(const void *p, size_t n, size_t k) {
87  assert(n < INT_MAX/k);
88  return pa_xmemdup(p, n*k);
89 }
90 
92 #define pa_xnewdup(type, p, n) ((type*) _pa_xnewdup_internal((p), (n), sizeof(type)))
93 
95 static void* _pa_xrenew_internal(void *p, size_t n, size_t k) PA_GCC_MALLOC PA_GCC_ALLOC_SIZE2(2,3);
96 
97 static inline void* _pa_xrenew_internal(void *p, size_t n, size_t k) {
98  assert(n < INT_MAX/k);
99  return pa_xrealloc(p, n*k);
100 }
101 
103 #define pa_xrenew(type, p, n) ((type*) _pa_xrenew_internal(p, (n), sizeof(type)))
104 
105 PA_C_DECL_END
106 
107 #endif
void * pa_xmemdup(const void *p, size_t l) PA_GCC_MALLOC PA_GCC_ALLOC_SIZE(2)
Duplicate the specified memory block.
void * pa_xmalloc0(size_t l) PA_GCC_MALLOC PA_GCC_ALLOC_SIZE(1)
Same as pa_xmalloc(), but initialize allocated memory to 0.
void pa_xfree(void *p)
Free allocated memory.
GCC attribute macros.
void * pa_xmalloc(size_t l) PA_GCC_MALLOC PA_GCC_ALLOC_SIZE(1)
Allocate the specified number of bytes, just like malloc() does.
char * pa_xstrdup(const char *s) PA_GCC_MALLOC
Duplicate the specified string, allocating memory with pa_xmalloc()
#define PA_GCC_MALLOC
Macro for usage of GCC's malloc attribute.
Definition: gccmacro.h:123
void * pa_xrealloc(void *ptr, size_t size) PA_GCC_ALLOC_SIZE(2)
The combination of pa_xmalloc() and realloc()
Define header version.
char * pa_xstrndup(const char *s, size_t l) PA_GCC_MALLOC
Duplicate the specified string, but truncate after l characters.
#define PA_GCC_ALLOC_SIZE2(x, y)
Macro for usage of GCC's alloc_size attribute.
Definition: gccmacro.h:114
#define PA_GCC_ALLOC_SIZE(x)
Macro for usage of GCC's alloc_size attribute.
Definition: gccmacro.h:112