File: ivl_alloc.h

package info (click to toggle)
iverilog 13.0-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 34,160 kB
  • sloc: cpp: 114,001; ansic: 65,058; yacc: 10,610; sh: 4,286; vhdl: 3,246; makefile: 1,884; perl: 1,813; python: 579; csh: 2
file content (107 lines) | stat: -rw-r--r-- 3,163 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
#ifndef IVL_ivl_alloc_H
#define IVL_ivl_alloc_H
/*
 *  Copyright (C) 2010-2025  Cary R. (cygcary@yahoo.com)
 *
 *  This program is free software; you can redistribute it and/or modify
 *  it under the terms of the GNU General Public License as published by
 *  the Free Software Foundation; either version 2 of the License, or
 *  (at your option) any later version.
 *
 *  This program is distributed in the hope that it will be useful,
 *  but WITHOUT ANY WARRANTY; without even the implied warranty of
 *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 *  GNU General Public License for more details.
 *
 *  You should have received a copy of the GNU General Public License along
 *  with this program; if not, write to the Free Software Foundation, Inc.,
 *  51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
 */

#ifdef __cplusplus
#  include <cstdlib>
#  include <cstdio>
#  include <cstring>
#else
#  include <stdlib.h>
#  include <stdio.h>
#  include <string.h>
#endif

#if !defined(_MSC_VER)
/*
 * Define a safer version of strdup().
 */

#define strdup(__ivl_str) \
({ \
      char *__ivl_rtn = strdup(__ivl_str); \
	/* If we run out of memory then exit with a message. */ \
      if (__ivl_rtn == NULL) { \
	    fprintf(stderr, "%s:%d: Error: strdup() ran out of memory.\n", \
	                    __FILE__, __LINE__); \
	    exit(1); \
      } \
      __ivl_rtn; \
})

/*
 * Define a safer version of malloc().
 */

#define malloc(__ivl_size) \
({ \
	/* To be safe we only evaluate the argument once. */ \
      size_t __ivl_lsize = __ivl_size; \
      void *__ivl_rtn = malloc(__ivl_lsize); \
	/* If we run out of memory then exit with a message. */ \
      if ((__ivl_rtn == NULL) && (__ivl_lsize != 0)) { \
	    fprintf(stderr, "%s:%d: Error: malloc() ran out of memory.\n", \
	                    __FILE__, __LINE__); \
	    exit(1); \
      } \
      __ivl_rtn; \
})

/*
 * Define a safer version of realloc().
 */

#define realloc(__ivl_ptr, __ivl_size) \
({ \
	/* To be safe we only evaluate the arguments once. */ \
      void *__ivl_lptr = __ivl_ptr; \
      size_t __ivl_lsize = __ivl_size; \
      void *__ivl_rtn = realloc(__ivl_lptr, __ivl_lsize); \
	/* If we run out of memory then exit with a message. */ \
      if ((__ivl_rtn == NULL) && (__ivl_lsize != 0)) { \
	    fprintf(stderr, "%s:%d: Error: realloc() ran out of memory.\n", \
	                    __FILE__, __LINE__); \
	    free(__ivl_lptr); \
	    exit(1); \
      } \
      __ivl_rtn; \
})

/*
 * Define a safer version of calloc().
 */

#define calloc(__ivl_count, __ivl_size) \
({ \
	/* To be safe we only evaluate the arguments once. */ \
      size_t __ivl_lcount = __ivl_count; \
      size_t __ivl_lsize = __ivl_size; \
      void *__ivl_rtn = calloc(__ivl_lcount, __ivl_lsize); \
	/* If we run out of memory then exit with a message. */ \
      if ((__ivl_rtn == NULL) && (__ivl_lcount != 0) && (__ivl_lsize != 0)) { \
	    fprintf(stderr, "%s:%d: Error: calloc() ran out of memory.\n", \
	                    __FILE__, __LINE__); \
	    exit(1); \
      } \
      __ivl_rtn; \
})

#endif // !defined(_MSC_VER)

#endif /* IVL_ivl_alloc_H */