memory.h, polish macros

This commit is contained in:
rlar 2013-07-16 20:58:59 +02:00
parent 44ef3db000
commit f973e7107f
2 changed files with 35 additions and 26 deletions

View File

@ -3,10 +3,12 @@
#include <stddef.h> #include <stddef.h>
#define TMALLOC(t,n) (t*) tmalloc(sizeof(t) * (size_t)(n)) #define TMALLOC(t, n) (t*) tmalloc(sizeof(t) * (size_t)(n))
#define TREALLOC(t,p,n) (t*) trealloc(p, sizeof(t) * (size_t)(n)) #define TREALLOC(t, p, n) (t*) trealloc(p, sizeof(t) * (size_t)(n))
#ifndef HAVE_LIBGC #ifndef HAVE_LIBGC
extern void *tmalloc(size_t num); extern void *tmalloc(size_t num);
extern void *trealloc(void *str, size_t num); extern void *trealloc(void *str, size_t num);
extern void txfree(void *ptr); extern void txfree(void *ptr);
@ -14,47 +16,54 @@ extern void txfree(void *ptr);
#define tfree(x) (txfree(x), (x) = 0) #define tfree(x) (txfree(x), (x) = 0)
#else #else
#include <gc/gc.h> #include <gc/gc.h>
#define tmalloc(m) GC_malloc(m) #define tmalloc(m) GC_malloc(m)
#define trealloc(m,n) GC_realloc((m),(n)) #define trealloc(m, n) GC_realloc((m), (n))
#define tfree(m) #define tfree(m)
#define txfree(m) #define txfree(m)
#endif
#endif /* HAVE_LIBGC */
#include "ngspice/stringutil.h" /* va: spice3 internally bzero */ #include "ngspice/stringutil.h" /* va: spice3 internally bzero */
#define alloc(TYPE) TMALLOC(TYPE, 1) #define alloc(TYPE) TMALLOC(TYPE, 1)
#define MALLOC(x) tmalloc((size_t)(x)) #define MALLOC(x) tmalloc((size_t) (x))
#define FREE(x) {if(x) { txfree(x); (x) = 0; }} #define FREE(x) do { if(x) { txfree(x); (x) = NULL; } } while(0)
#define REALLOC(x,y) trealloc(x, (size_t)(y)) #define REALLOC(x, y) trealloc(x, (size_t) (y))
#define ZERO(PTR,TYPE) bzero(PTR, sizeof(TYPE)) #define ZERO(PTR, TYPE) bzero(PTR, sizeof(TYPE))
#if defined(_MSC_VER) || defined(__MINGW32__) #if defined(_MSC_VER) || defined(__MINGW32__)
void * hrealloc(void *ptr, size_t num); void *hrealloc(void *ptr, size_t num);
#endif #endif
#ifdef CIDER #ifdef CIDER
#define RALLOC(ptr,type,number) \ #define RALLOC(ptr, type, number) \
if ((number) && (ptr = (type *)calloc((size_t)(number), sizeof(type))) == NULL) { \ do { \
return(E_NOMEM); \ if ((number) && (ptr = (type *)calloc((size_t)(number), sizeof(type))) == NULL) \
} return E_NOMEM; \
} while(0)
#define XALLOC(ptr,type,number) \ #define XALLOC(ptr, type, number) \
if ((number) && (ptr = (type *)calloc((size_t)(number), sizeof(type))) == NULL) { \ do { \
SPfrontEnd->IFerror( E_PANIC, "Out of Memory", NIL(IFuid) ); \ if ((number) && (ptr = (type *)calloc((size_t)(number), sizeof(type))) == NULL) { \
exit( 1 ); \ SPfrontEnd->IFerror(E_PANIC, "Out of Memory", NULL); \
} exit(1); \
} \
} while(0)
#define XCALLOC(ptr,type,number) \ #define XCALLOC(ptr, type, number) \
if ((number) && (ptr = (type *)calloc((size_t)(number), sizeof(type))) == NULL) { \ do { \
fprintf( stderr, "Out of Memory\n" ); \ if ((number) && (ptr = (type *)calloc((size_t)(number), sizeof(type))) == NULL) { \
exit( 1 ); \ fprintf(stderr, "Out of Memory\n"); \
} exit(1); \
} \
} while(0)
#endif /* CIDER */ #endif /* CIDER */

View File

@ -47,7 +47,7 @@ INPpas3(CKTcircuit *ckt, card *data, INPtables *tab, TSKtask *task,
for(current = data; current != NULL; current = current->nextcard) { for(current = data; current != NULL; current = current->nextcard) {
line = current->line; line = current->line;
FREE(token) FREE(token);
INPgetTok(&line,&token,1); INPgetTok(&line,&token,1);
if (strcmp(token,".nodeset")==0) { if (strcmp(token,".nodeset")==0) {