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:
parent
1993b90edf
commit
f40d49b704
13
puttymem.h
13
puttymem.h
@ -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
|
||||
|
Loading…
Reference in New Issue
Block a user