From 6f708e30340f5f186a609ef88b4f2957b6068faf Mon Sep 17 00:00:00 2001 From: Peter Johnson Date: Mon, 29 Oct 2001 00:11:14 +0000 Subject: [PATCH] Add xfree() to replace calls to free(). This also fixes the build breakage caused by removing stdlib includes. svn path=/trunk/yasm/; revision=298 --- libyasm/bitvect.c | 4 ++-- libyasm/bytecode.c | 2 +- libyasm/errwarn.c | 2 +- libyasm/expr.c | 16 ++++++++-------- libyasm/floatnum.c | 6 +++--- libyasm/intnum.c | 6 +++--- libyasm/mergesort.c | 2 +- libyasm/symrec.c | 2 +- libyasm/util.h | 1 + libyasm/xmalloc.c | 12 ++++++++++++ mergesort.c | 2 +- modules/arch/x86/expr.c | 16 ++++++++-------- modules/arch/x86/x86expr.c | 16 ++++++++-------- src/arch/x86/expr.c | 16 ++++++++-------- src/arch/x86/x86expr.c | 16 ++++++++-------- src/bitvect.c | 4 ++-- src/bytecode.c | 2 +- src/errwarn.c | 2 +- src/expr.c | 16 ++++++++-------- src/floatnum.c | 6 +++--- src/intnum.c | 6 +++--- src/mergesort.c | 2 +- src/symrec.c | 2 +- src/ternary.c | 2 +- src/util.h | 1 + src/xmalloc.c | 12 ++++++++++++ util.h | 1 + 27 files changed, 101 insertions(+), 74 deletions(-) diff --git a/libyasm/bitvect.c b/libyasm/bitvect.c index 20de3bb6..ef239184 100644 --- a/libyasm/bitvect.c +++ b/libyasm/bitvect.c @@ -451,7 +451,7 @@ void BitVector_Destroy(wordptr addr) /* free */ if (addr != NULL) { addr -= BIT_VECTOR_HIDDEN_WORDS; - free((voidptr) addr); + xfree((voidptr) addr); } } @@ -1930,7 +1930,7 @@ ErrCode BitVector_from_Enum(wordptr addr, charptr string) void BitVector_Dispose(charptr string) { - if (string != NULL) free((voidptr) string); + if (string != NULL) xfree((voidptr) string); } void BitVector_Bit_Off(wordptr addr, N_int indx) /* X = X \ {x} */ diff --git a/libyasm/bytecode.c b/libyasm/bytecode.c index 24867681..a6fc2078 100644 --- a/libyasm/bytecode.c +++ b/libyasm/bytecode.c @@ -737,7 +737,7 @@ bytecodes_append(bytecodehead *headp, bytecode *bc) STAILQ_INSERT_TAIL(headp, bc, link); return bc; } else { - free(bc); + xfree(bc); } } return (bytecode *)NULL; diff --git a/libyasm/errwarn.c b/libyasm/errwarn.c index 05760ed7..4e183561 100644 --- a/libyasm/errwarn.c +++ b/libyasm/errwarn.c @@ -297,7 +297,7 @@ OutputAllErrorWarning(void) we = STAILQ_FIRST(errwarns); while (we) { we2 = STAILQ_NEXT(we, link); - free(we); + xfree(we); we = we2; } diff --git a/libyasm/expr.c b/libyasm/expr.c index 2f1b507a..1ec7a969 100644 --- a/libyasm/expr.c +++ b/libyasm/expr.c @@ -109,7 +109,7 @@ expr_new(ExprOp op, ExprItem *left, ExprItem *right) ptr->terms[1].type = EXPR_NONE; if (left) { memcpy(&ptr->terms[0], left, sizeof(ExprItem)); - free(left); + xfree(left); ptr->numterms++; } else { InternalError(__LINE__, __FILE__, @@ -118,7 +118,7 @@ expr_new(ExprOp op, ExprItem *left, ExprItem *right) if (right) { memcpy(&ptr->terms[1], right, sizeof(ExprItem)); - free(right); + xfree(right); ptr->numterms++; } @@ -443,8 +443,8 @@ expr_level_op(expr *e, int fold_const, int simplify_ident) e->terms[i].data.expn->op == EXPR_IDENT) { expr *sube = e->terms[i].data.expn; e->terms[i] = sube->terms[0]; - free(sube->filename); - free(sube); + xfree(sube->filename); + xfree(sube); } if (e->terms[i].type == EXPR_EXPR && @@ -559,8 +559,8 @@ expr_level_op(expr *e, int fold_const, int simplify_ident) /* delete subexpression, but *don't delete nodes* (as we've just * copied them!) */ - free(sube->filename); - free(sube); + xfree(sube->filename); + xfree(sube); } else if (o != i) { /* copy operand if it changed places */ e->terms[o--] = e->terms[i]; @@ -714,8 +714,8 @@ expr_delete_each(expr *e, void *d) break; /* none of the other types needs to be deleted */ } } - free(e->filename); - free(e); /* free ourselves */ + xfree(e->filename); + xfree(e); /* free ourselves */ return 0; /* don't stop recursion */ } diff --git a/libyasm/floatnum.c b/libyasm/floatnum.c index 1329a5b3..b4386c15 100644 --- a/libyasm/floatnum.c +++ b/libyasm/floatnum.c @@ -497,7 +497,7 @@ void floatnum_delete(floatnum *flt) { BitVector_Destroy(flt->mantissa); - free(flt); + xfree(flt); } void @@ -604,7 +604,7 @@ floatnum_get_common(const floatnum *flt, unsigned char *ptr, int byte_size, memcpy(ptr, buf, byte_size*sizeof(unsigned char)); /* free allocated resources */ - free(buf); + xfree(buf); BitVector_Destroy(output); @@ -682,7 +682,7 @@ floatnum_print(const floatnum *flt) /* Internal format */ str = BitVector_to_Hex(flt->mantissa); printf("%c %s *2^%04x\n", flt->sign?'-':'+', str, flt->exponent); - free(str); + xfree(str); /* 32-bit (single precision) format */ printf("32-bit: %d: ", floatnum_get_sized(flt, out, 4)); diff --git a/libyasm/intnum.c b/libyasm/intnum.c index 05be9b5c..6e8c7bfc 100644 --- a/libyasm/intnum.c +++ b/libyasm/intnum.c @@ -222,7 +222,7 @@ intnum_delete(intnum *intn) { if (intn->type == INTNUM_BV) BitVector_Destroy(intn->val.bv); - free(intn); + xfree(intn); } void @@ -542,7 +542,7 @@ intnum_get_sized(const intnum *intn, unsigned char *ptr, size_t size) InternalError(__LINE__, __FILE__, _("Invalid size specified (too large)")); memcpy(ptr, buf, size); - free(buf); + xfree(buf); break; } } @@ -627,7 +627,7 @@ intnum_print(const intnum *intn) case INTNUM_BV: s = BitVector_to_Hex(intn->val.bv); printf("0x%s/%u", s, (unsigned int)intn->origsize); - free(s); + xfree(s); break; } } diff --git a/libyasm/mergesort.c b/libyasm/mergesort.c index 21de4f71..6091983b 100644 --- a/libyasm/mergesort.c +++ b/libyasm/mergesort.c @@ -236,7 +236,7 @@ COPY: b = t; memmove(list2, list1, nmemb*size); list2 = list1; } - free(list2); + xfree(list2); return (0); } diff --git a/libyasm/symrec.c b/libyasm/symrec.c index 411278e6..03e641ae 100644 --- a/libyasm/symrec.c +++ b/libyasm/symrec.c @@ -98,7 +98,7 @@ symrec_get_or_new(const char *name, int in_table) rec2 = ternary_insert(&sym_table, name, rec, 0); if (rec2 != rec) { - free(rec); + xfree(rec); return rec2; } rec->status = SYM_NOSTATUS; diff --git a/libyasm/util.h b/libyasm/util.h index 0fa3f546..4fba8452 100644 --- a/libyasm/util.h +++ b/libyasm/util.h @@ -71,6 +71,7 @@ int strncasecmp(const char *s1, const char *s2, size_t n); void *xmalloc(size_t size); void *xcalloc(size_t nelem, size_t elsize); void *xrealloc(void *oldmem, size_t size); +void xfree(void *p); #ifdef HAVE_SYS_CDEFS_H # include diff --git a/libyasm/xmalloc.c b/libyasm/xmalloc.c index baca2515..119376e6 100644 --- a/libyasm/xmalloc.c +++ b/libyasm/xmalloc.c @@ -29,6 +29,9 @@ # include #endif +#include +#define _(String) gettext(String) + #include "errwarn.h" #ifndef DMALLOC @@ -80,4 +83,13 @@ xrealloc(void *oldmem, size_t size) return newmem; } + +void +xfree(void *p) +{ + if (!p) + InternalError(__LINE__, __FILE__, _("Tried to free NULL pointer")); + free(p); +} + #endif diff --git a/mergesort.c b/mergesort.c index 21de4f71..6091983b 100644 --- a/mergesort.c +++ b/mergesort.c @@ -236,7 +236,7 @@ COPY: b = t; memmove(list2, list1, nmemb*size); list2 = list1; } - free(list2); + xfree(list2); return (0); } diff --git a/modules/arch/x86/expr.c b/modules/arch/x86/expr.c index 2f1b507a..1ec7a969 100644 --- a/modules/arch/x86/expr.c +++ b/modules/arch/x86/expr.c @@ -109,7 +109,7 @@ expr_new(ExprOp op, ExprItem *left, ExprItem *right) ptr->terms[1].type = EXPR_NONE; if (left) { memcpy(&ptr->terms[0], left, sizeof(ExprItem)); - free(left); + xfree(left); ptr->numterms++; } else { InternalError(__LINE__, __FILE__, @@ -118,7 +118,7 @@ expr_new(ExprOp op, ExprItem *left, ExprItem *right) if (right) { memcpy(&ptr->terms[1], right, sizeof(ExprItem)); - free(right); + xfree(right); ptr->numterms++; } @@ -443,8 +443,8 @@ expr_level_op(expr *e, int fold_const, int simplify_ident) e->terms[i].data.expn->op == EXPR_IDENT) { expr *sube = e->terms[i].data.expn; e->terms[i] = sube->terms[0]; - free(sube->filename); - free(sube); + xfree(sube->filename); + xfree(sube); } if (e->terms[i].type == EXPR_EXPR && @@ -559,8 +559,8 @@ expr_level_op(expr *e, int fold_const, int simplify_ident) /* delete subexpression, but *don't delete nodes* (as we've just * copied them!) */ - free(sube->filename); - free(sube); + xfree(sube->filename); + xfree(sube); } else if (o != i) { /* copy operand if it changed places */ e->terms[o--] = e->terms[i]; @@ -714,8 +714,8 @@ expr_delete_each(expr *e, void *d) break; /* none of the other types needs to be deleted */ } } - free(e->filename); - free(e); /* free ourselves */ + xfree(e->filename); + xfree(e); /* free ourselves */ return 0; /* don't stop recursion */ } diff --git a/modules/arch/x86/x86expr.c b/modules/arch/x86/x86expr.c index 2f1b507a..1ec7a969 100644 --- a/modules/arch/x86/x86expr.c +++ b/modules/arch/x86/x86expr.c @@ -109,7 +109,7 @@ expr_new(ExprOp op, ExprItem *left, ExprItem *right) ptr->terms[1].type = EXPR_NONE; if (left) { memcpy(&ptr->terms[0], left, sizeof(ExprItem)); - free(left); + xfree(left); ptr->numterms++; } else { InternalError(__LINE__, __FILE__, @@ -118,7 +118,7 @@ expr_new(ExprOp op, ExprItem *left, ExprItem *right) if (right) { memcpy(&ptr->terms[1], right, sizeof(ExprItem)); - free(right); + xfree(right); ptr->numterms++; } @@ -443,8 +443,8 @@ expr_level_op(expr *e, int fold_const, int simplify_ident) e->terms[i].data.expn->op == EXPR_IDENT) { expr *sube = e->terms[i].data.expn; e->terms[i] = sube->terms[0]; - free(sube->filename); - free(sube); + xfree(sube->filename); + xfree(sube); } if (e->terms[i].type == EXPR_EXPR && @@ -559,8 +559,8 @@ expr_level_op(expr *e, int fold_const, int simplify_ident) /* delete subexpression, but *don't delete nodes* (as we've just * copied them!) */ - free(sube->filename); - free(sube); + xfree(sube->filename); + xfree(sube); } else if (o != i) { /* copy operand if it changed places */ e->terms[o--] = e->terms[i]; @@ -714,8 +714,8 @@ expr_delete_each(expr *e, void *d) break; /* none of the other types needs to be deleted */ } } - free(e->filename); - free(e); /* free ourselves */ + xfree(e->filename); + xfree(e); /* free ourselves */ return 0; /* don't stop recursion */ } diff --git a/src/arch/x86/expr.c b/src/arch/x86/expr.c index 2f1b507a..1ec7a969 100644 --- a/src/arch/x86/expr.c +++ b/src/arch/x86/expr.c @@ -109,7 +109,7 @@ expr_new(ExprOp op, ExprItem *left, ExprItem *right) ptr->terms[1].type = EXPR_NONE; if (left) { memcpy(&ptr->terms[0], left, sizeof(ExprItem)); - free(left); + xfree(left); ptr->numterms++; } else { InternalError(__LINE__, __FILE__, @@ -118,7 +118,7 @@ expr_new(ExprOp op, ExprItem *left, ExprItem *right) if (right) { memcpy(&ptr->terms[1], right, sizeof(ExprItem)); - free(right); + xfree(right); ptr->numterms++; } @@ -443,8 +443,8 @@ expr_level_op(expr *e, int fold_const, int simplify_ident) e->terms[i].data.expn->op == EXPR_IDENT) { expr *sube = e->terms[i].data.expn; e->terms[i] = sube->terms[0]; - free(sube->filename); - free(sube); + xfree(sube->filename); + xfree(sube); } if (e->terms[i].type == EXPR_EXPR && @@ -559,8 +559,8 @@ expr_level_op(expr *e, int fold_const, int simplify_ident) /* delete subexpression, but *don't delete nodes* (as we've just * copied them!) */ - free(sube->filename); - free(sube); + xfree(sube->filename); + xfree(sube); } else if (o != i) { /* copy operand if it changed places */ e->terms[o--] = e->terms[i]; @@ -714,8 +714,8 @@ expr_delete_each(expr *e, void *d) break; /* none of the other types needs to be deleted */ } } - free(e->filename); - free(e); /* free ourselves */ + xfree(e->filename); + xfree(e); /* free ourselves */ return 0; /* don't stop recursion */ } diff --git a/src/arch/x86/x86expr.c b/src/arch/x86/x86expr.c index 2f1b507a..1ec7a969 100644 --- a/src/arch/x86/x86expr.c +++ b/src/arch/x86/x86expr.c @@ -109,7 +109,7 @@ expr_new(ExprOp op, ExprItem *left, ExprItem *right) ptr->terms[1].type = EXPR_NONE; if (left) { memcpy(&ptr->terms[0], left, sizeof(ExprItem)); - free(left); + xfree(left); ptr->numterms++; } else { InternalError(__LINE__, __FILE__, @@ -118,7 +118,7 @@ expr_new(ExprOp op, ExprItem *left, ExprItem *right) if (right) { memcpy(&ptr->terms[1], right, sizeof(ExprItem)); - free(right); + xfree(right); ptr->numterms++; } @@ -443,8 +443,8 @@ expr_level_op(expr *e, int fold_const, int simplify_ident) e->terms[i].data.expn->op == EXPR_IDENT) { expr *sube = e->terms[i].data.expn; e->terms[i] = sube->terms[0]; - free(sube->filename); - free(sube); + xfree(sube->filename); + xfree(sube); } if (e->terms[i].type == EXPR_EXPR && @@ -559,8 +559,8 @@ expr_level_op(expr *e, int fold_const, int simplify_ident) /* delete subexpression, but *don't delete nodes* (as we've just * copied them!) */ - free(sube->filename); - free(sube); + xfree(sube->filename); + xfree(sube); } else if (o != i) { /* copy operand if it changed places */ e->terms[o--] = e->terms[i]; @@ -714,8 +714,8 @@ expr_delete_each(expr *e, void *d) break; /* none of the other types needs to be deleted */ } } - free(e->filename); - free(e); /* free ourselves */ + xfree(e->filename); + xfree(e); /* free ourselves */ return 0; /* don't stop recursion */ } diff --git a/src/bitvect.c b/src/bitvect.c index 20de3bb6..ef239184 100644 --- a/src/bitvect.c +++ b/src/bitvect.c @@ -451,7 +451,7 @@ void BitVector_Destroy(wordptr addr) /* free */ if (addr != NULL) { addr -= BIT_VECTOR_HIDDEN_WORDS; - free((voidptr) addr); + xfree((voidptr) addr); } } @@ -1930,7 +1930,7 @@ ErrCode BitVector_from_Enum(wordptr addr, charptr string) void BitVector_Dispose(charptr string) { - if (string != NULL) free((voidptr) string); + if (string != NULL) xfree((voidptr) string); } void BitVector_Bit_Off(wordptr addr, N_int indx) /* X = X \ {x} */ diff --git a/src/bytecode.c b/src/bytecode.c index 24867681..a6fc2078 100644 --- a/src/bytecode.c +++ b/src/bytecode.c @@ -737,7 +737,7 @@ bytecodes_append(bytecodehead *headp, bytecode *bc) STAILQ_INSERT_TAIL(headp, bc, link); return bc; } else { - free(bc); + xfree(bc); } } return (bytecode *)NULL; diff --git a/src/errwarn.c b/src/errwarn.c index 05760ed7..4e183561 100644 --- a/src/errwarn.c +++ b/src/errwarn.c @@ -297,7 +297,7 @@ OutputAllErrorWarning(void) we = STAILQ_FIRST(errwarns); while (we) { we2 = STAILQ_NEXT(we, link); - free(we); + xfree(we); we = we2; } diff --git a/src/expr.c b/src/expr.c index 2f1b507a..1ec7a969 100644 --- a/src/expr.c +++ b/src/expr.c @@ -109,7 +109,7 @@ expr_new(ExprOp op, ExprItem *left, ExprItem *right) ptr->terms[1].type = EXPR_NONE; if (left) { memcpy(&ptr->terms[0], left, sizeof(ExprItem)); - free(left); + xfree(left); ptr->numterms++; } else { InternalError(__LINE__, __FILE__, @@ -118,7 +118,7 @@ expr_new(ExprOp op, ExprItem *left, ExprItem *right) if (right) { memcpy(&ptr->terms[1], right, sizeof(ExprItem)); - free(right); + xfree(right); ptr->numterms++; } @@ -443,8 +443,8 @@ expr_level_op(expr *e, int fold_const, int simplify_ident) e->terms[i].data.expn->op == EXPR_IDENT) { expr *sube = e->terms[i].data.expn; e->terms[i] = sube->terms[0]; - free(sube->filename); - free(sube); + xfree(sube->filename); + xfree(sube); } if (e->terms[i].type == EXPR_EXPR && @@ -559,8 +559,8 @@ expr_level_op(expr *e, int fold_const, int simplify_ident) /* delete subexpression, but *don't delete nodes* (as we've just * copied them!) */ - free(sube->filename); - free(sube); + xfree(sube->filename); + xfree(sube); } else if (o != i) { /* copy operand if it changed places */ e->terms[o--] = e->terms[i]; @@ -714,8 +714,8 @@ expr_delete_each(expr *e, void *d) break; /* none of the other types needs to be deleted */ } } - free(e->filename); - free(e); /* free ourselves */ + xfree(e->filename); + xfree(e); /* free ourselves */ return 0; /* don't stop recursion */ } diff --git a/src/floatnum.c b/src/floatnum.c index 1329a5b3..b4386c15 100644 --- a/src/floatnum.c +++ b/src/floatnum.c @@ -497,7 +497,7 @@ void floatnum_delete(floatnum *flt) { BitVector_Destroy(flt->mantissa); - free(flt); + xfree(flt); } void @@ -604,7 +604,7 @@ floatnum_get_common(const floatnum *flt, unsigned char *ptr, int byte_size, memcpy(ptr, buf, byte_size*sizeof(unsigned char)); /* free allocated resources */ - free(buf); + xfree(buf); BitVector_Destroy(output); @@ -682,7 +682,7 @@ floatnum_print(const floatnum *flt) /* Internal format */ str = BitVector_to_Hex(flt->mantissa); printf("%c %s *2^%04x\n", flt->sign?'-':'+', str, flt->exponent); - free(str); + xfree(str); /* 32-bit (single precision) format */ printf("32-bit: %d: ", floatnum_get_sized(flt, out, 4)); diff --git a/src/intnum.c b/src/intnum.c index 05be9b5c..6e8c7bfc 100644 --- a/src/intnum.c +++ b/src/intnum.c @@ -222,7 +222,7 @@ intnum_delete(intnum *intn) { if (intn->type == INTNUM_BV) BitVector_Destroy(intn->val.bv); - free(intn); + xfree(intn); } void @@ -542,7 +542,7 @@ intnum_get_sized(const intnum *intn, unsigned char *ptr, size_t size) InternalError(__LINE__, __FILE__, _("Invalid size specified (too large)")); memcpy(ptr, buf, size); - free(buf); + xfree(buf); break; } } @@ -627,7 +627,7 @@ intnum_print(const intnum *intn) case INTNUM_BV: s = BitVector_to_Hex(intn->val.bv); printf("0x%s/%u", s, (unsigned int)intn->origsize); - free(s); + xfree(s); break; } } diff --git a/src/mergesort.c b/src/mergesort.c index 21de4f71..6091983b 100644 --- a/src/mergesort.c +++ b/src/mergesort.c @@ -236,7 +236,7 @@ COPY: b = t; memmove(list2, list1, nmemb*size); list2 = list1; } - free(list2); + xfree(list2); return (0); } diff --git a/src/symrec.c b/src/symrec.c index 411278e6..03e641ae 100644 --- a/src/symrec.c +++ b/src/symrec.c @@ -98,7 +98,7 @@ symrec_get_or_new(const char *name, int in_table) rec2 = ternary_insert(&sym_table, name, rec, 0); if (rec2 != rec) { - free(rec); + xfree(rec); return rec2; } rec->status = SYM_NOSTATUS; diff --git a/src/ternary.c b/src/ternary.c index 04f8b2e0..96083c32 100644 --- a/src/ternary.c +++ b/src/ternary.c @@ -110,7 +110,7 @@ ternary_cleanup (ternary_tree p) if (p->splitchar) ternary_cleanup (p->eqkid); ternary_cleanup (p->hikid); - free (p); + xfree (p); } } diff --git a/src/util.h b/src/util.h index 0fa3f546..4fba8452 100644 --- a/src/util.h +++ b/src/util.h @@ -71,6 +71,7 @@ int strncasecmp(const char *s1, const char *s2, size_t n); void *xmalloc(size_t size); void *xcalloc(size_t nelem, size_t elsize); void *xrealloc(void *oldmem, size_t size); +void xfree(void *p); #ifdef HAVE_SYS_CDEFS_H # include diff --git a/src/xmalloc.c b/src/xmalloc.c index baca2515..119376e6 100644 --- a/src/xmalloc.c +++ b/src/xmalloc.c @@ -29,6 +29,9 @@ # include #endif +#include +#define _(String) gettext(String) + #include "errwarn.h" #ifndef DMALLOC @@ -80,4 +83,13 @@ xrealloc(void *oldmem, size_t size) return newmem; } + +void +xfree(void *p) +{ + if (!p) + InternalError(__LINE__, __FILE__, _("Tried to free NULL pointer")); + free(p); +} + #endif diff --git a/util.h b/util.h index 0fa3f546..4fba8452 100644 --- a/util.h +++ b/util.h @@ -71,6 +71,7 @@ int strncasecmp(const char *s1, const char *s2, size_t n); void *xmalloc(size_t size); void *xcalloc(size_t nelem, size_t elsize); void *xrealloc(void *oldmem, size_t size); +void xfree(void *p); #ifdef HAVE_SYS_CDEFS_H # include -- 2.40.0