PulseAudio 16.1

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, see <http://www.gnu.org/licenses/>.
21***/
22
23#include <sys/types.h>
24#include <stdlib.h>
25#include <limits.h>
26#include <assert.h>
27
28#include <pulse/cdecl.h>
29#include <pulse/gccmacro.h>
30#include <pulse/version.h>
31
36PA_C_DECL_BEGIN
37
39 void* pa_xmalloc(size_t l) PA_GCC_MALLOC PA_GCC_ALLOC_SIZE(1);
40
42 void *pa_xmalloc0(size_t l) PA_GCC_MALLOC PA_GCC_ALLOC_SIZE(1);
43
45 void *pa_xrealloc(void *ptr, size_t size) PA_GCC_ALLOC_SIZE(2);
46
48 void pa_xfree(void *p);
49
51 char *pa_xstrdup(const char *s) PA_GCC_MALLOC;
52
54 char *pa_xstrndup(const char *s, size_t l) PA_GCC_MALLOC;
55
57 void* pa_xmemdup(const void *p, size_t l) PA_GCC_MALLOC PA_GCC_ALLOC_SIZE(2);
58
60 static void* _pa_xnew_internal(size_t n, size_t k) PA_GCC_MALLOC PA_GCC_ALLOC_SIZE2(1,2);
61
62 static inline void* _pa_xnew_internal(size_t n, size_t k) {
63 assert(n < INT_MAX/k);
64 return pa_xmalloc(n*k);
65}
66
68#define pa_xnew(type, n) ((type*) _pa_xnew_internal((n), sizeof(type)))
69
71 static void* _pa_xnew0_internal(size_t n, size_t k) PA_GCC_MALLOC PA_GCC_ALLOC_SIZE2(1,2);
72
73 static inline void* _pa_xnew0_internal(size_t n, size_t k) {
74 assert(n < INT_MAX/k);
75 return pa_xmalloc0(n*k);
76}
77
79#define pa_xnew0(type, n) ((type*) _pa_xnew0_internal((n), sizeof(type)))
80
82 static void* _pa_xnewdup_internal(const void *p, size_t n, size_t k) PA_GCC_MALLOC PA_GCC_ALLOC_SIZE2(2,3);
83
84 static inline void* _pa_xnewdup_internal(const void *p, size_t n, size_t k) {
85 assert(n < INT_MAX/k);
86 return pa_xmemdup(p, n*k);
87}
88
90#define pa_xnewdup(type, p, n) ((type*) _pa_xnewdup_internal((p), (n), sizeof(type)))
91
93 static void* _pa_xrenew_internal(void *p, size_t n, size_t k) PA_GCC_MALLOC PA_GCC_ALLOC_SIZE2(2,3);
94
95 static inline void* _pa_xrenew_internal(void *p, size_t n, size_t k) {
96 assert(n < INT_MAX/k);
97 return pa_xrealloc(p, n*k);
98}
99
101#define pa_xrenew(type, p, n) ((type*) _pa_xrenew_internal(p, (n), sizeof(type)))
102
103PA_C_DECL_END
104
105#endif
gccmacro.h
GCC attribute macros.
PA_GCC_MALLOC
#define PA_GCC_MALLOC
Macro for usage of GCC's malloc attribute.
Definition: gccmacro.h:119
PA_GCC_ALLOC_SIZE
#define PA_GCC_ALLOC_SIZE(x)
Macro for usage of GCC's alloc_size attribute.
Definition: gccmacro.h:108
PA_GCC_ALLOC_SIZE2
#define PA_GCC_ALLOC_SIZE2(x, y)
Macro for usage of GCC's alloc_size attribute.
Definition: gccmacro.h:110
pa_xstrdup
char * pa_xstrdup(const char *s) PA_GCC_MALLOC
Duplicate the specified string, allocating memory with pa_xmalloc()
pa_xstrndup
char * pa_xstrndup(const char *s, size_t l) PA_GCC_MALLOC
Duplicate the specified string, but truncate after l characters.
pa_xmemdup
void * pa_xmemdup(const void *p, size_t l) PA_GCC_MALLOC PA_GCC_ALLOC_SIZE(2)
Duplicate the specified memory block.
pa_xfree
void pa_xfree(void *p)
Free allocated memory.
pa_xrealloc
void * pa_xrealloc(void *ptr, size_t size) PA_GCC_ALLOC_SIZE(2)
The combination of pa_xmalloc() and realloc()
pa_xmalloc
void * pa_xmalloc(size_t l) PA_GCC_MALLOC PA_GCC_ALLOC_SIZE(1)
Allocate the specified number of bytes, just like malloc() does.
pa_xmalloc0
void * pa_xmalloc0(size_t l) PA_GCC_MALLOC PA_GCC_ALLOC_SIZE(1)
Same as pa_xmalloc(), but initialize allocated memory to 0.