[PATCH 09/11] staging: comedi: comedi_buf: clarify comedi_buf_read_alloc()

Dan Carpenter dan.carpenter at oracle.com
Thu Jan 3 12:01:30 UTC 2013


On Wed, Jan 02, 2013 at 01:12:15PM -0600, H Hartley Sweeten wrote:
> On Wednesday, January 02, 2013 12:03 PM, Ian Abbott wrote:
> > On 02/01/2013 18:10, H Hartley Sweeten wrote:
> >> Will the munge_count always be larger, or equal, to the buf_read_alloc_count?
> >> The original code had the (int) cast so I wasn't sure. If so, then yes the variable
> >> should be an unsigned int.
> >
> > Well the value it is being compared to (nbytes) is an unsigned int, so 
> > the int value (available) will be converted to unsigned int before the 
> > comparison anyway.  So making 'available' an unsigned int to begin with 
> > shouldn't break anything that isn't already broke!
> 
> Not so. Simple test:
> 

Uh...  Ian is correct.  In the new code it doesn't matter if
"available" is signed or unsigned because the comparison is always
promoted to unsigned.

I think you are assuming that 99 is an unsigned int but actually it
defaults to int.  The test should be something like:

	int available = -40;
	unsigned int nbytes = 5;

	if (nbytes > available)
		printf("Not promoted\n");
	else
		printf("Negative 'availabled' treated as large unsigned int.\n");

I think the rules are that comparisons are promoted to the type with
the most bits for positive integers.  That's how I treat them in
Smatch.

regards,
dan carpenter




More information about the devel mailing list