[PATCH xrdb] predefined cpp macros can produce unexpected results (bug 3413)

Matthieu Herrb matthieu.herrb at laas.fr
Sun Dec 5 13:31:16 PST 2010


On Fri, Dec 03, 2010 at 03:52:04PM -0500, Matt Turner wrote:
> From: Matthieu Herrb <matthieu.herrb at laas.fr>
> 
> GNU cpp is predefining a number of symbols, depending on the host and target
> architecture. This can produce some unexpected results: for example, the
> expansion of CLIENTHOST if the host name is i386.my.domain.
> 
> The attached patch creates a new -undef option to xrdb that is passed to
> cpp.
> ---
> Should it be on by default?

It would make sense to me, but given the low interest for the PR, I
guess the are only a few people getting hit by this and they can cope
with an extra option.

> 
> Matthieu, please give your Signed-off-by.

Signed-off-by: Matthieu Herrb <matthieu.herrb at laas.fr>

> 
>  xrdb.c   |   12 +++++++++++-
>  xrdb.man |    4 ++++
>  2 files changed, 15 insertions(+), 1 deletions(-)
> 
> diff --git a/xrdb.c b/xrdb.c
> index 21005c0..68accf8 100644
> --- a/xrdb.c
> +++ b/xrdb.c
> @@ -479,8 +479,11 @@ DoCmdDefines(String *buff)
>  		*val = '=';
>  	    } else
>  		AddSimpleDef(buff, arg + 2);
> -	} else
> +	} else if (arg[1] == 'U') {
>  	    AddUndef(buff, arg + 2);
> +	} else if (!strcmp(arg, "-undef") && oper != OPSYMBOLS) {
> +	    addstring(buff, " -undef");
> +	}
>      }
>  }
>  
> @@ -867,6 +870,13 @@ main(int argc, char *argv[])
>  		    fatal("%s: Too many -U/-D arguments\n", ProgramName);
>  		}
>  		continue;
> +	    } else if (!strcmp ("-undef", arg)) {
> +		if (num_cmd_defines < MAX_CMD_DEFINES) {
> +		    cmd_defines[num_cmd_defines++] = "-undef";
> +		} else {
> +		    fatal("%s: Too many cpp arguments\n", ProgramName);
> +		}
> +		continue;
>  	    }
>  	    Syntax ();
>  	} else if (arg[0] == '=') 
> diff --git a/xrdb.man b/xrdb.man
> index d0d45ad..ddf1a73 100644
> --- a/xrdb.man
> +++ b/xrdb.man
> @@ -223,6 +223,10 @@ This option indicates that
>  should not run the input file through a preprocessor before loading it
>  into properties.
>  .TP 8
> +.B -undef
> +This option is passed to the C preprocessor if used. It prevents it from
> +predefining any system specific macros.
> +.TP 8
>  .B \-symbols
>  This option indicates that the symbols that are defined for the preprocessor
>  should be printed onto the standard output.
> -- 
> 1.7.2.2
> 

-- 
Matthieu Herrb


More information about the xorg-devel mailing list