On Wed, May 26, 2010 at 12:12 PM, Mark Kettenis <mark.kette...@xs4all.nl> wrote: >> From: Jamey Sharp <ja...@minilop.net> >> Date: Wed, 26 May 2010 10:40:51 -0700 >> >> On Wed, May 26, 2010 at 1:29 AM, Mark Kettenis <mark.kette...@xs4all.nl> >> wrote: >> >> From: Jamey Sharp <ja...@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 _______________________________________________ xorg-devel@lists.x.org: X.Org development Archives: http://lists.x.org/archives/xorg-devel Info: http://lists.x.org/mailman/listinfo/xorg-devel