Hi,
Apart from any oversights, I have completed my run of cast-qual fixes for
the "dlls" and "dlls/tests" directories.
The one file that most distorts the picture when -Wcast-qual is applied
is "unicode.h", since its wide-string functions are inlined and it is
included quite widely.
I have posted a patch (dated 16 Dec 2006, entitled "include: Cast-qual
warnings fix using const_cast macro") that, if not accepted, you can apply
locally, if you want to build with "-Wcast-qual" to see the extent of the
remaining problem.
For the places where we still must use casts, I propose the introduction of
a macro that takes on the role of the "const_cast" in C++. My attempt at
that is as follows.
#ifdef __cplusplus
#define const_cast(t, e) const_cast<t>(e)
#else
#define const_cast(t, e) (t)(ULONG_PTR)(e)
#endif
This will make its purpose stand out from those of other casts. So, for
example, the definition of strchrW() would become:
extern inline WCHAR *strchrW( const WCHAR *str, WCHAR ch )
{
do { if (*str == ch) return const_cast(WCHAR *, str); } while (*str++);
return NULL;
}
The positive point of aiming to add -Wcast-qual universally - I would
argue - is that it lets the compiler watch out for inadvertent
introductions of fresh violations, so I become redundant, and you proper
programmers can concentrate on more interesting things. :)
I invite you, please, to debate the above issues, so we can determine the
way forward concerning this issue. Meanwhile, I shall move on to the
few "programs" and "server" files that generate cast-qual warnings.
Thanks,
-- Andy.