[PATCH:libXt 4/6] Fix char vs. unsigned char warnings.

walter harms wharms at bfs.de
Thu Jun 27 02:55:40 PDT 2013



Am 27.06.2013 08:33, schrieb Thomas Klausner:
> On Wed, Jun 26, 2013 at 08:55:35PM -0400, Thomas E. Dickey wrote:
>> On Tue, Jun 25, 2013 at 11:02:48PM +0200, Thomas Klausner wrote:
>>> ---
>>>  src/ResConfig.c | 4 ++--
>>>  src/TMparse.c   | 4 ++--
>>>  2 files changed, 4 insertions(+), 4 deletions(-)
>>>
>>> diff --git a/src/ResConfig.c b/src/ResConfig.c
>>> index 152d9cf..5a7f6d2 100644
>>> --- a/src/ResConfig.c
>>> +++ b/src/ResConfig.c
>>> @@ -892,7 +892,7 @@ _XtResourceConfigurationEH (
>>>  	int		actual_format;
>>>  	unsigned long	nitems;
>>>  	unsigned long	leftover;
>>> -	unsigned char	*data = NULL;
>>> +	char		*data = NULL;
>>>  	unsigned long	resource_len;
>>>  	char		*data_ptr;
>>>  	char		*resource;
>>> @@ -952,7 +952,7 @@ _XtResourceConfigurationEH (
>>>  		pd->rcm_data, 0L, 8192L,
>>>  		TRUE, XA_STRING,
>>>  		&actual_type, &actual_format, &nitems, &leftover,
>>> -		&data ) == Success && actual_type == XA_STRING
>>> +		(unsigned char **)&data ) == Success && actual_type == XA_STRING
>>>  			   && actual_format == 8) {
>>
>> One problem with casts is that they're telling the compiler to ignore its type-checking.
>> Casting an address like that happens to work - usually - but not always.
> 
> The problem is that the same variable is used in strtoul as first
> argument, which wants a 'const char *', and in XGetWindowProperty as
> 12th (if I didn't miscount), which wants an unsigned char **.
> 
> i.e.
> 
>         if (XGetWindowProperty (XtDisplay(w),
>                 XtWindow (w),
>                 pd->rcm_data, 0L, 8192L,
>                 TRUE, XA_STRING,
>                 &actual_type, &actual_format, &nitems, &leftover,
>                 (unsigned char **)&data ) == Success && actual_type == XA_STRING
>                            && actual_format == 8) {
> ...
>                         resource_len = strtoul (data, &data_ptr, 10);
> 
> How would you suggest fixing issues like that?
>  Thomas
> 

i would suggest to simplify the code first by making two lines.
That would improve readablity exspecially since XGetWindowProperty()
takes a lot of arguments.

ret=XGetWindowProperty(..);
if ( ret == Success && actual_type == XA_STRING  && actual_format == 8) {

And when you need a cast anyway why not using a "void *" ?

just my 2 cents,
 wh




More information about the xorg-devel mailing list