]>
code.delx.au - pulseaudio/blob - src/polypcore/xmalloc.c
4 This file is part of polypaudio.
6 polypaudio is free software; you can redistribute it and/or modify
7 it under the terms of the GNU Lesser General Public License as published
8 by the Free Software Foundation; either version 2 of the License,
9 or (at your option) any later version.
11 polypaudio is distributed in the hope that it will be useful, but
12 WITHOUT ANY WARRANTY; without even the implied warranty of
13 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
14 General Public License for more details.
16 You should have received a copy of the GNU Lesser General Public License
17 along with polypaudio; if not, write to the Free Software
18 Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
32 #include <polypcore/util.h>
33 #include <polypcore/gccmacro.h>
37 /* Make sure not to allocate more than this much memory. */
38 #define MAX_ALLOC_SIZE (1024*1024*20) /* 20MB */
46 static void oom(void) PA_GCC_NORETURN
;
48 /** called in case of an OOM situation. Prints an error message and
50 static void oom(void) {
51 static const char e
[] = "Not enough memory\n";
52 pa_loop_write(STDERR_FILENO
, e
, sizeof(e
)-1);
59 void* pa_xmalloc(size_t size
) {
62 assert(size
< MAX_ALLOC_SIZE
);
64 if (!(p
= malloc(size
)))
70 void* pa_xmalloc0(size_t size
) {
73 assert(size
< MAX_ALLOC_SIZE
);
75 if (!(p
= calloc(1, size
)))
81 void *pa_xrealloc(void *ptr
, size_t size
) {
84 assert(size
< MAX_ALLOC_SIZE
);
86 if (!(p
= realloc(ptr
, size
)))
91 void* pa_xmemdup(const void *p
, size_t l
) {
95 char *r
= pa_xmalloc(l
);
101 char *pa_xstrdup(const char *s
) {
105 return pa_xmemdup(s
, strlen(s
)+1);
108 char *pa_xstrndup(const char *s
, size_t l
) {
113 size_t t
= strlen(s
);
118 r
= pa_xmemdup(s
, t
+1);