RE: [RFC 1/9] Unify windows specifics into common/windows-hdep files

Pierre Muller
2011-04-01T05:13:17Z

> > Cc: <gdb-patches@sourceware.org>
> > Date: Wed, 30 Mar 2011 23:32:36 +0200
> >
> > > > +#undef _G_SUFFIX
> > >
> > > I think the C Standard says that macros whose name begins with an
> > > underscore and a capital letter are reserved. Applications should not
> > > use such macros.
> >
> > But we are also using __USEWIDE before my patch ...
> > or do you mean that two underscores are OK?
>
> No, AFAIK macros that begin with two underscores are also reserved.

But nobody protested for __USEWIDE nor for __PMAX for instance...
But checking gdb directory, it seems that are only a fee macros
starting with an underscore.

> > I completely remove __USEWIDE and tried to replace it by this new
> > USE_WIDE_WINAPI.
> > Or is this __USEWIDE macro used anywhere else than inside GDB code?
>
> I don't think so, but maybe someone else could tell for sure.
>
> > Should I rather call the macro USE_UNICODE_WINAPI
> > (and USE_ANSI_WINAPI to force ANSI version?)
>
> I don't think it matters what the macro is called.

I agree with you on this point.

> > > > +# define CreateProcess CreateProcessW
> > > > +# define GetSystemDirectory GetSystemDirectoryW
> > > > +# define windows_strlen wcslen
> > >
> > > Ouch! So any API that needs one of the two varieties will need to be
> > > added to this list of #define's? Is that wise?
> >
> > Isn't it better than being forced to use
> > #ifdef __USEWIDE
> > CreateProcessW (...
> > #else
> > CreateProcessA (...
> > #endif
>
> The Windows headers already have the machinery to do all this for you:
> it works by defining _UNICODE.

But using this macro would require that we are able to
put of the code that decides if we want to use the Unicode or ASCII version
of the windows header before even including it.
I am unsure if this is possible...
If you look at the code in common/windows-hdep.c I submitted,
you will see that we need at least to load sys/cygwin.h and
cygwin/version.h headers
in order to be able to compute the Cygwin DLL version.
Each might already also include windows.h
meaning than setting _UNICODE at that point would be too late.

If fact, looking at ChangeLogs and using 'git blame'
it seems like __USEWIDE was only introduced in March 2010 by Christopher
Faylor.
Maybe Christopher could tell us why he decided to use this conditional
instead
of the standard _UNICODE macro.

Pierre