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
40
43
45void *pa_xrealloc(void *ptr, size_t size) PA_GCC_ALLOC_SIZE(2);
46
48void pa_xfree(void *p);
49
51char *pa_xstrdup(const char *s) PA_GCC_MALLOC;
52
54char *pa_xstrndup(const char *s, size_t l) PA_GCC_MALLOC;
55
57void* pa_xmemdup(const void *p, size_t l) PA_GCC_MALLOC PA_GCC_ALLOC_SIZE(2);
58
60static void* _pa_xnew_internal(size_t n, size_t k) PA_GCC_MALLOC PA_GCC_ALLOC_SIZE2(1,2);
61
62static 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
71static void* _pa_xnew0_internal(size_t n, size_t k) PA_GCC_MALLOC PA_GCC_ALLOC_SIZE2(1,2);
72
73static 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
82static void* _pa_xnewdup_internal(const void *p, size_t n, size_t k) PA_GCC_MALLOC PA_GCC_ALLOC_SIZE2(2,3);
83
84static 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
93static void* _pa_xrenew_internal(void *p, size_t n, size_t k) PA_GCC_MALLOC PA_GCC_ALLOC_SIZE2(2,3);
94
95static 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
GCC attribute macros.
#define PA_GCC_MALLOC
Macro for usage of GCC's malloc attribute.
Definition: gccmacro.h:119
#define PA_GCC_ALLOC_SIZE(x)
Macro for usage of GCC's alloc_size attribute.
Definition: gccmacro.h:108
#define PA_GCC_ALLOC_SIZE2(x, y)
Macro for usage of GCC's alloc_size attribute.
Definition: gccmacro.h:110
char * pa_xstrdup(const char *s) PA_GCC_MALLOC
Duplicate the specified string, allocating memory with pa_xmalloc()
char * pa_xstrndup(const char *s, size_t l) PA_GCC_MALLOC
Duplicate the specified string, but truncate after l characters.
void * pa_xmemdup(const void *p, size_t l) PA_GCC_MALLOC PA_GCC_ALLOC_SIZE(2)
Duplicate the specified memory block.
void pa_xfree(void *p)
Free allocated memory.
void * pa_xrealloc(void *ptr, size_t size) PA_GCC_ALLOC_SIZE(2)
The combination of pa_xmalloc() and realloc()
void * pa_xmalloc(size_t l) PA_GCC_MALLOC PA_GCC_ALLOC_SIZE(1)
Allocate the specified number of bytes, just like malloc() does.
void * pa_xmalloc0(size_t l) PA_GCC_MALLOC PA_GCC_ALLOC_SIZE(1)
Same as pa_xmalloc(), but initialize allocated memory to 0.