Joe Orton
Fri, 23 May 2008 05:13:23 -0700
On Wed, May 21, 2008 at 07:50:02AM +1000, Bojan Smojver wrote: > I'm getting this (APR 1.2.x): > ------------------------------------- > strings/apr_snprintf.c: In function 'apr_vformatter': > strings/apr_snprintf.c:1253: warning: comparison with string literal > results in unspecified behavior > ------------------------------------- > > The line is: > ------------------------------------- > if (prefix_char != NUL && s != S_NULL && s != char_buf) > ------------------------------------- > > Where s is pointer to char and S_NULL defined as "null". > > We really want to do this here, right? Just checking... Interesting - is that gcc 4.3? The code is bogus because it assumes all the expansions of the macro result in a string with the same address; does this patch fix the warning? Index: strings/apr_snprintf.c =================================================================== --- strings/apr_snprintf.c (revision 659512) +++ strings/apr_snprintf.c (working copy) @@ -54,7 +54,8 @@ #endif #define NUL '\0' -#define S_NULL "(null)" +static const char null_string[] = "(null)"; +#define S_NULL ((char *)null_string) #define S_NULL_LEN 6 #define FLOAT_DIGITS 6