an update containing libatomic changes.
[AROS.git] / tools / MetaMake / mem.c
blob85437a5a369660a442262e4dbbe0be4c7f07e7cd
1 /* MetaMake - A Make extension
2 Copyright © 1995-2004, The AROS Development Team. All rights reserved.
4 This file is part of MetaMake.
6 MetaMake is free software; you can redistribute it and/or modify
7 it under the terms of the GNU General Public License as published by
8 the Free Software Foundation; either version 2, or (at your option)
9 any later version.
11 MetaMake is distributed in the hope that it will be useful,
12 but WITHOUT ANY WARRANTY; without even the implied warranty of
13 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 GNU General Public License for more details.
16 You should have received a copy of the GNU General Public License
17 along with GNU CC; see the file COPYING. If not, write to
18 the Free Software Foundation, 59 Temple Place - Suite 330,
19 Boston, MA 02111-1307, USA. */
21 #define _GNU_SOURCE /* for string.h:strndup() */
22 #include "config.h"
24 #include <stdio.h>
25 #include <assert.h>
26 #ifdef HAVE_STRING_H
27 # include <string.h>
28 #else
29 # include <strings.h>
30 #endif
31 #include <stdlib.h>
33 #include "mem.h"
35 /* Functions */
36 char *
37 _xstrdup (const char * str, const char * file, int line)
39 char * nstr;
41 assert (str);
43 nstr = strdup (str);
45 if (!nstr)
47 fprintf (stderr, "Out of memory in %s:%d", file, line);
48 exit (20);
51 return nstr;
54 char *
55 _xstrndup (const char * str, size_t len, const char * file, int line)
57 char * nstr;
59 assert (str);
61 #ifdef HAVE_STRNDUP
62 nstr = strndup (str, len);
63 #else
64 nstr = malloc(strlen(str) >= len ? len : strlen(str) + 1);
65 if (nstr)
66 strncpy (nstr, str, len);
67 #endif
69 if (!nstr)
71 fprintf (stderr, "Out of memory in %s:%d", file, line);
72 exit (20);
75 return nstr;
78 void *
79 _xmalloc (size_t size, const char * file, int line)
81 void * ptr;
83 ptr = malloc (size);
85 if (size && !ptr)
87 fprintf (stderr, "Out of memory in %s:%d", file, line);
88 exit (20);
91 return ptr;
94 void
95 _xfree (void * ptr, const char * file, int line)
97 if (ptr)
98 free (ptr);
99 else
100 fprintf (stderr, "Illegal free(NULL) in %s:%d", file, line);