[PATCH xrdb] predefined cpp macros can produce unexpected results (bug 3413)
Gaetan Nadon
memsize at videotron.ca
Fri Dec 3 14:38:06 PST 2010
On Fri, 2010-12-03 at 15:52 -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?
>
> Matthieu, please give your Signed-off-by.
>
> 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.
If I understand, strings like CLIENTHOST were not meant to be
substituted.
What if the pre-processor is not a GNU cpp? Solaris or something else.
You might want to look at this link, it looks like -undef does not work
properly on CYGWIN gcc 2.95.
http://www.cygwin.com/ml/cygwin/2002-05/msg01613.html
The gcc doc is pretty vague as to what will not be substituted. It would
be nice to have a list of such symbols in the commit to help
investigation if something is not expected.
Acked-by: Gaetan Nadon <memsize at videotron.ca>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.x.org/archives/xorg-devel/attachments/20101203/a6550d54/attachment.html>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 197 bytes
Desc: This is a digitally signed message part
URL: <http://lists.x.org/archives/xorg-devel/attachments/20101203/a6550d54/attachment.pgp>
More information about the xorg-devel
mailing list