1
0
mirror of https://git.tartarus.org/simon/putty.git synced 2025-01-09 17:38:00 +00:00

Rework the new type-check in sresize so that it doesn't cause a

compile warning ('left-hand operand of comma expression has no
effect'), which of course becomes fatal under -Werror.

(This would have been instantly noticeable to people compiling with
the old-fashioned Makefile.gtk, which does include -Wall -Werror, but
those of us using the new autoconf makefile hadn't noticed.)

[originally from svn r9582]
This commit is contained in:
Simon Tatham 2012-07-19 04:29:50 +00:00
parent 1993b90edf
commit f40d49b704

View File

@ -34,10 +34,19 @@ void safefree(void *);
* possible, in favour of these type-casting macros which ensure
* you don't mistakenly allocate enough space for one sort of
* structure and assign it to a different sort of pointer.
*
* The nasty trick in sresize with sizeof arranges for the compiler,
* in passing, to type-check the expression ((type *)0 == (ptr)), i.e.
* to type-check that the input pointer is a pointer to the correct
* type. The construction sizeof(stuff) ? (b) : (b) looks like a
* violation of the first principle of safe macros, but in fact it's
* OK - although it _expands_ the macro parameter more than once, it
* only _evaluates_ it once, so it's still side-effect safe.
*/
#define snew(type) ((type *)snmalloc(1, sizeof(type)))
#define snewn(n, type) ((type *)snmalloc((n), sizeof(type)))
#define sresize(ptr, n, type) \
((type *)snrealloc((sizeof((type *)0 == (ptr)), (ptr)), (n), sizeof(type)))
#define sresize(ptr, n, type) \
((type *)snrealloc(sizeof((type *)0 == (ptr)) ? (ptr) : (ptr), \
(n), sizeof(type)))
#endif