From 47061bb488400d53fd20deb52d51763d2caa056e Mon Sep 17 00:00:00 2001 From: simon Date: Mon, 22 Jul 2013 07:12:15 +0000 Subject: [PATCH] Replace the type-checking COMPTR macro with my current idea of best practice in type-check macros. git-svn-id: svn://svn.tartarus.org/sgt/putty@9963 cda61777-01e9-0310-a592-d414129be87e --- windows/winjump.c | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/windows/winjump.c b/windows/winjump.c index abefe445..f674133b 100644 --- a/windows/winjump.c +++ b/windows/winjump.c @@ -353,12 +353,12 @@ static const PROPERTYKEY PKEY_Title = { 0x00000002 }; -/* Type-checking macro to provide arguments for CoCreateInstance() etc. - * The pointer arithmetic is a compile-time pointer type check that 'obj' - * really is a 'type **', but is intended to have no effect at runtime. */ +/* Type-checking macro to provide arguments for CoCreateInstance() + * etc, ensuring that 'obj' really is a 'type **'. */ +#define typecheck(checkexpr, result) \ + (sizeof(checkexpr) ? (result) : (result)) #define COMPTR(type, obj) &IID_##type, \ - (void **)(void *)((obj) + (sizeof((obj)-(type **)(obj))) \ - - (sizeof((obj)-(type **)(obj)))) + typecheck((obj)-(type **)(obj), (void **)(void *)(obj)) static char putty_path[2048]; -- 2.11.0