Wide-string Functions: Double Casting

Andrew Talbot Andrew.Talbot at talbotville.com
Tue Aug 8 11:55:47 CDT 2006


Marcus Meissner wrote:

> I asked our gcc gurus.
> 
> - If you want to cast, do not use size_t but uintptr_t.
> 
> Or:
> 
> - Do not inline the function, and compile its file without -Wcast-qual.
> 
> - Fix the prototype to read "extern inline const WCHAR *strrchrW( const
> WCHAR *str, WCHAR ch )"
> 
> Ciao, Marcus

intptr_t and uintptr_t were, of course, introduced in C99 specifically to be
integer types to which any valid pointer to an object may be converted.
This is the ultimate way to go, I believe, but I would need help or advice
to patch the appropriate make file to cater for users with non-C99 systems.

Incidentally, regarding the other suggested solutions: IMHO, I don't think
it a good idea to remove the inlining, thus adding the overhead of a
function call to these functions. And if one constifies the return value,
then it becomes no longer possible to write code like:

        WCHAR arrW[] = {'b','i','t',0}, *pwc;

    if ((pwc = strrchrW(arrW, 'i')) != NULL)
        *pwc = 'a';

Thanks,

-- Andy.





More information about the wine-devel mailing list