[PATCH 02/16] xf86AutoConfig: Simplify builtin-config splitting.

Dan Nicholson dbn.lists at gmail.com
Wed May 26 12:19:52 PDT 2010


On Wed, May 26, 2010 at 12:12 PM, Mark Kettenis <mark.kettenis at xs4all.nl> wrote:
>> From: Jamey Sharp <jamey at minilop.net>
>> Date: Wed, 26 May 2010 10:40:51 -0700
>>
>> On Wed, May 26, 2010 at 1:29 AM, Mark Kettenis <mark.kettenis at xs4all.nl> wrote:
>> >> From: Jamey Sharp <jamey at minilop.net>
>> >> Date: Tue, 25 May 2010 16:53:13 -0700
>> >>
>> >> @@ -179,7 +169,7 @@ xf86AutoConfig(void)
>> >>      xf86MsgVerb(X_DEFAULT, 3, "--- End of built-in configuration ---\n");
>> >>
>> >>      xf86initConfigFiles();
>> >> -    xf86setBuiltinConfig(builtinConfig);
>> >> +    xf86setBuiltinConfig((const char **) builtinConfig);
>> >
>> > That cast isn't really necessary isn't it?
>>
>> I wasn't happy about it either, but at least according to GCC, while
>> "const char *" is assignment-compatible from "char *", "const char **"
>> is not compatible with "char **". So I was going to have to cast
>> either at the call to free or this call to xf86setBuiltinConfig, and
>> this seemed more sane to me.
>
> Ugh, pointers to pointers continue to confuse me, so I wouldn't be
> able to tell if GCC is on crack here or not.  Thanks for the
> explanation.

We had the same discussion a week or so ago about the char **tags in
InputAttributes. Finally I had to see exactly what gcc was up to. The
results don't make me happy, but I'm no C guru to say whether it's
right or wrong.

int main(void)
{
    const char * const *a;
    const char **b;
    char * const *c;
    char *d[] = {"foo", "bar"};

    a = d; /* warning: assignment from incompatible pointer type */
    b = d; /* warning: assignment from incompatible pointer type */
    c = d; /* OK? */

    return 0;
}

--
Dan


More information about the xorg-devel mailing list