[DRBD-user] 0.7 & gcc-2.9x bug

Lars Ellenberg lars.ellenberg at linbit.com
Tue Jun 22 13:36:27 CEST 2004


On Mon, Jun 21, 2004 at 09:06:04PM +0200, Bernd Schubert wrote:
> Hello,
> 
> When I just tried to compile 0.7-pre8 on a debian woody system, it failed:
> 
> gcc-2.95 -c -Wall -I../drbd   -c -o drbdsetup.o drbdsetup.c
> drbdsetup.c:1255: unterminated string or character constant
> drbdsetup.c:193: possible real start of unterminated constant
> make: *** [drbdsetup.o] Error 1
> 
> However on my sid system it compiled fine, so I decided to investigate 
> further. Somehow the PERROR macro is misinterpreted by the preprocessor.
> 
> The appropriate line from 'gcc-3.3 -E  -Wall -I../drbd   drbdsetup.c' looks 
> like this:
> 
> do { fprintf(stderr,"can not resolv the hostname" ": "); perror(0); } while 
> (0);
> 
> Whereas the gcc-2.95 output has a missing quotation mark ("):
> 
> do { fprintf(stderr , "can not resolv the hostname"  ": ); perror(0); } while 
> (0)
> 
> 
> Since the PERROR macro looks fine, I really believe that its a compiler bug.
> 
> Here's an IMHO ugly workaround, but I have no other idea how to workaround it 
> else:
> 
> bernd at bathl user>diff -u drbdsetup.c drbdsetup.c.new
> --- drbdsetup.c 2004-06-18 14:47:37.000000000 +0200
> +++ drbdsetup.c.new     2004-06-21 20:44:11.000000000 +0200
> @@ -84,7 +84,7 @@
>  #endif
> 
>  #define PERROR(fmt, args...) \
> -do { fprintf(stderr,fmt ": ", ##args); perror(0); } while (0)
> +do { fprintf(stderr,fmt ": " "", ##args); perror(0); } while (0)

try this:
#define PERROR(fmt, args...) \
do { fprintf(stderr,fmt ": " , ##args); perror(0); } while (0)
( note the additional blank ^ here...

	lge



More information about the drbd-user mailing list