Lots of cleanups to fvwm-menu-desktop
[fvwm.git] / libs / safemalloc.c
blobd446cddf09e2fd97439fc6765068f2ba34d45d4d
1 /* -*-c-*- */
2 /* This program is free software; you can redistribute it and/or modify
3 * it under the terms of the GNU General Public License as published by
4 * the Free Software Foundation; either version 2 of the License, or
5 * (at your option) any later version.
7 * This program is distributed in the hope that it will be useful,
8 * but WITHOUT ANY WARRANTY; without even the implied warranty of
9 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
10 * GNU General Public License for more details.
12 * You should have received a copy of the GNU General Public License
13 * along with this program; if not, write to the Free Software
14 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
17 #include "config.h"
19 #include <stdio.h>
20 #include "safemalloc.h"
22 static void alloc_failed(char *c, int length)
24 fprintf(stderr, "%s of %d bytes failed. Exiting\n", c, length);
25 exit(1);
29 /***********************************************************************
31 * Procedure:
32 * safemalloc - mallocs specified space or exits if there's a
33 * problem
35 ***********************************************************************/
36 char *safemalloc(int length)
38 char *ptr;
40 if(length <= 0)
41 length = 1;
43 ptr = malloc(length);
44 if(ptr == (char *)0)
46 /* doesn't return */
47 alloc_failed("malloc", length);
49 return ptr;
53 /***********************************************************************
55 * Procedure:
56 * safecalloc - callocs specified space or exits if there's a
57 * problem
59 ***********************************************************************/
60 char *safecalloc(int num, int length)
62 char *ptr;
64 ptr = calloc(num, length);
65 if(ptr == (char *)0)
67 /* doesn't return */
68 alloc_failed("calloc", length);
70 return ptr;
74 /***********************************************************************
76 * Procedure:
77 * saferealloc - reallocs specified space or exits if there's a
78 * problem
80 ***********************************************************************/
81 char *saferealloc(char *src, int length)
83 char *ptr;
85 if (src)
86 ptr = realloc((void *)src, length);
87 else
88 ptr = malloc(length);
89 if(ptr == (char *)0)
91 /* doesn't return */
92 alloc_failed("realloc", length);
94 return ptr;
97 /***********************************************************************
99 * Procedure:
100 * safestrdup - duplicates a string or exits if there's a
101 * problem
103 ***********************************************************************/
104 char *safestrdup(const char *src)
106 char *cpy = strdup(src);
107 if (cpy == (char *)0)
109 /* doesn't return */
110 alloc_failed("strdup", strlen(src) + (size_t)1);
112 return cpy;