]> granicus.if.org Git - yasm/commitdiff
Add xfree() to replace calls to free().
authorPeter Johnson <peter@tortall.net>
Mon, 29 Oct 2001 00:11:14 +0000 (00:11 -0000)
committerPeter Johnson <peter@tortall.net>
Mon, 29 Oct 2001 00:11:14 +0000 (00:11 -0000)
This also fixes the build breakage caused by removing stdlib includes.

svn path=/trunk/yasm/; revision=298

27 files changed:
libyasm/bitvect.c
libyasm/bytecode.c
libyasm/errwarn.c
libyasm/expr.c
libyasm/floatnum.c
libyasm/intnum.c
libyasm/mergesort.c
libyasm/symrec.c
libyasm/util.h
libyasm/xmalloc.c
mergesort.c
modules/arch/x86/expr.c
modules/arch/x86/x86expr.c
src/arch/x86/expr.c
src/arch/x86/x86expr.c
src/bitvect.c
src/bytecode.c
src/errwarn.c
src/expr.c
src/floatnum.c
src/intnum.c
src/mergesort.c
src/symrec.c
src/ternary.c
src/util.h
src/xmalloc.c
util.h

index 20de3bb6246d281cb0dafdfd6a4cdd3cca5e3efb..ef2391843c9c1ec65747a9046e2a27e9bcf9d2fb 100644 (file)
@@ -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}   */
index 24867681c76e255d6fa3b86ec2d2f375f6df91b6..a6fc2078b93408ad4bba949541546330e8c3d56a 100644 (file)
@@ -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;
index 05760ed7b4d6c4ccff3f3a4f3177887eeba5fdf2..4e183561308f798d506386e94cd65766fc5360fc 100644 (file)
@@ -297,7 +297,7 @@ OutputAllErrorWarning(void)
     we = STAILQ_FIRST(errwarns);
     while (we) {
        we2 = STAILQ_NEXT(we, link);
-       free(we);
+       xfree(we);
        we = we2;
     }
 
index 2f1b507ab5a806f3f24a2b574ba529521d64b9f7..1ec7a96991c82ae500afc4ceea15b5f729b288cd 100644 (file)
@@ -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 */
 }
 
index 1329a5b36d2fb886cf223d022e485d0f42f1b396..b4386c157be9a38887b632fdbbee6de6887fd74b 100644 (file)
@@ -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));
index 05be9b5c2cf2551b402c44b0936e07fe40183217..6e8c7bfc4785411bb34b65699b96b12c9b34e082 100644 (file)
@@ -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;
     }
 }
index 21de4f71c151f0516859d7c8ee9ed4ef4b896ca0..6091983b412a21561fad4d1b7c05f04ecda040d1 100644 (file)
@@ -236,7 +236,7 @@ COPY:                               b = t;
                memmove(list2, list1, nmemb*size);
                list2 = list1;
        }
-       free(list2);
+       xfree(list2);
        return (0);
 }
 
index 411278e682f2f41da46b2f10dd853a6073fdc6af..03e641aee2e37832e20cfb3b9962372a90a1b9ee 100644 (file)
@@ -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;
index 0fa3f54645f980ecd925e1fb421fc2dd5442ed1e..4fba8452bf64da292300d1b9ff85b67bd26819d9 100644 (file)
@@ -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 <sys/cdefs.h>
index baca251536880c5b8a72a25c6fb20798b1b4c66d..119376e69c331580305a5beae16a41b9b8fbe8f3 100644 (file)
@@ -29,6 +29,9 @@
 # include <stdlib.h>
 #endif
 
+#include <libintl.h>
+#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
index 21de4f71c151f0516859d7c8ee9ed4ef4b896ca0..6091983b412a21561fad4d1b7c05f04ecda040d1 100644 (file)
@@ -236,7 +236,7 @@ COPY:                               b = t;
                memmove(list2, list1, nmemb*size);
                list2 = list1;
        }
-       free(list2);
+       xfree(list2);
        return (0);
 }
 
index 2f1b507ab5a806f3f24a2b574ba529521d64b9f7..1ec7a96991c82ae500afc4ceea15b5f729b288cd 100644 (file)
@@ -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 */
 }
 
index 2f1b507ab5a806f3f24a2b574ba529521d64b9f7..1ec7a96991c82ae500afc4ceea15b5f729b288cd 100644 (file)
@@ -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 */
 }
 
index 2f1b507ab5a806f3f24a2b574ba529521d64b9f7..1ec7a96991c82ae500afc4ceea15b5f729b288cd 100644 (file)
@@ -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 */
 }
 
index 2f1b507ab5a806f3f24a2b574ba529521d64b9f7..1ec7a96991c82ae500afc4ceea15b5f729b288cd 100644 (file)
@@ -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 */
 }
 
index 20de3bb6246d281cb0dafdfd6a4cdd3cca5e3efb..ef2391843c9c1ec65747a9046e2a27e9bcf9d2fb 100644 (file)
@@ -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}   */
index 24867681c76e255d6fa3b86ec2d2f375f6df91b6..a6fc2078b93408ad4bba949541546330e8c3d56a 100644 (file)
@@ -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;
index 05760ed7b4d6c4ccff3f3a4f3177887eeba5fdf2..4e183561308f798d506386e94cd65766fc5360fc 100644 (file)
@@ -297,7 +297,7 @@ OutputAllErrorWarning(void)
     we = STAILQ_FIRST(errwarns);
     while (we) {
        we2 = STAILQ_NEXT(we, link);
-       free(we);
+       xfree(we);
        we = we2;
     }
 
index 2f1b507ab5a806f3f24a2b574ba529521d64b9f7..1ec7a96991c82ae500afc4ceea15b5f729b288cd 100644 (file)
@@ -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 */
 }
 
index 1329a5b36d2fb886cf223d022e485d0f42f1b396..b4386c157be9a38887b632fdbbee6de6887fd74b 100644 (file)
@@ -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));
index 05be9b5c2cf2551b402c44b0936e07fe40183217..6e8c7bfc4785411bb34b65699b96b12c9b34e082 100644 (file)
@@ -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;
     }
 }
index 21de4f71c151f0516859d7c8ee9ed4ef4b896ca0..6091983b412a21561fad4d1b7c05f04ecda040d1 100644 (file)
@@ -236,7 +236,7 @@ COPY:                               b = t;
                memmove(list2, list1, nmemb*size);
                list2 = list1;
        }
-       free(list2);
+       xfree(list2);
        return (0);
 }
 
index 411278e682f2f41da46b2f10dd853a6073fdc6af..03e641aee2e37832e20cfb3b9962372a90a1b9ee 100644 (file)
@@ -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;
index 04f8b2e0a92fccce87c9fe8f16d821f5c202b48d..96083c3290601d1dfefe9d4751cfad7a3414c7ab 100644 (file)
@@ -110,7 +110,7 @@ ternary_cleanup (ternary_tree p)
       if (p->splitchar)
        ternary_cleanup (p->eqkid);
       ternary_cleanup (p->hikid);
-      free (p);
+      xfree (p);
     }
 }
 
index 0fa3f54645f980ecd925e1fb421fc2dd5442ed1e..4fba8452bf64da292300d1b9ff85b67bd26819d9 100644 (file)
@@ -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 <sys/cdefs.h>
index baca251536880c5b8a72a25c6fb20798b1b4c66d..119376e69c331580305a5beae16a41b9b8fbe8f3 100644 (file)
@@ -29,6 +29,9 @@
 # include <stdlib.h>
 #endif
 
+#include <libintl.h>
+#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 0fa3f54645f980ecd925e1fb421fc2dd5442ed1e..4fba8452bf64da292300d1b9ff85b67bd26819d9 100644 (file)
--- 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 <sys/cdefs.h>