From 8fc8f946c49f0851625091b83efb7c332bf57011 Mon Sep 17 00:00:00 2001 From: Jim Meyering Date: Tue, 13 Sep 2005 21:11:25 +0000 Subject: Revert unintended change that removed definitions of X2REALLOC and X2NREALLOC. --- lib/xalloc.h | 20 +++++++++++++++++++- 1 file changed, 19 insertions(+), 1 deletion(-) diff --git a/lib/xalloc.h b/lib/xalloc.h index f80977e30..b743d6843 100644 --- a/lib/xalloc.h +++ b/lib/xalloc.h @@ -1,7 +1,7 @@ /* xalloc.h -- malloc with out-of-memory checking Copyright (C) 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, - 1999, 2000, 2003, 2004 Free Software Foundation, Inc. + 1999, 2000, 2003, 2004, 2005 Free Software Foundation, Inc. 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 @@ -56,6 +56,24 @@ void *x2nrealloc (void *p, size_t *pn, size_t s); void *xmemdup (void const *p, size_t s); char *xstrdup (char const *str); +/* Verify a requirement at compile-time (unlike assert, which is runtime). */ +# undef VERIFY_EXPR +# define VERIFY_EXPR(assertion) \ + (void)((struct {char a[(assertion) ? 1 : -1]; } *) 0) + +/* This is simply a shorthand for the common case in which + the third argument to x2nrealloc would be `sizeof (*P)'. + Ensure that sizeof (*P) is *not* 1. In that case, it'd be + better to use X2REALLOC, although not strictly necessary. */ +# define X2NREALLOC(P, PN) (VERIFY_EXPR (sizeof(*P) != 1), \ + x2nrealloc (P, PN, sizeof (*P))) + +/* Using x2realloc (when appropriate) usually makes your code more + readable than using x2nrealloc, but it also makes it so your + code will malfunction if sizeof (*P) ever becomes 2 or greater. + So use this macro instead of using x2realloc directly. */ +# define X2REALLOC(P, PN) (VERIFY_EXPR (sizeof(*P) == 1), x2realloc (P, PN)) + /* Return 1 if an array of N objects, each of size S, cannot exist due to size arithmetic overflow. S must be positive and N must be nonnegative. This is a macro, not an inline function, so that it -- cgit v1.2.3-54-g00ecf