Re: [PATCH] Input: bcm5974.c initialize raw_w, raw_x and raw_y before it get used

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Jaswinder Singh Rajput wrote:
> On Sun, 2009-09-13 at 01:24 +0200, Henrik Rydberg wrote:
>> Jaswinder Singh Rajput wrote:
>>> raw_w, raw_x and raw_y is used uninitialized for !raw_n
>> Thanks for the heads up, but actually not, since !raw_n also implies
>> !(ptest > PRESSURE_LOW).
>>
> 
> Then can we move 'if (ptest > PRESSURE_LOW && origin)' stuff to 'if
> (raw_n)'. If not then my patch is correct.

Yes, that's it, thanks. So this patch ought to solve the warning cleanly:

diff --git a/drivers/input/mouse/bcm5974.c b/drivers/input/mouse/bcm5974.c
index 2d8fc0b..3b598de 100644
--- a/drivers/input/mouse/bcm5974.c
+++ b/drivers/input/mouse/bcm5974.c
@@ -345,21 +345,22 @@ static int report_tp_state(struct bcm5974 *dev, int size)
 		/* set the integrated button if applicable */
 		if (c->tp_type == TYPE2)
 			ibt = raw2int(dev->tp_data[BUTTON_TYPE2]);
-	}

-	/* while tracking finger still valid, count all fingers */
-	if (ptest > PRESSURE_LOW && origin) {
-		abs_p = ptest;
-		abs_w = int2bound(&c->w, raw_w);
-		abs_x = int2bound(&c->x, raw_x - c->x.devmin);
-		abs_y = int2bound(&c->y, c->y.devmax - raw_y);
-		while (raw_n--) {
-			ptest = int2bound(&c->p, raw2int(f->force_major));
-			if (ptest > PRESSURE_LOW)
-				nmax++;
-			if (ptest > PRESSURE_HIGH)
-				nmin++;
-			f++;
+		/* while tracking finger still valid, count all fingers */
+		if (ptest > PRESSURE_LOW && origin) {
+			abs_p = ptest;
+			abs_w = int2bound(&c->w, raw_w);
+			abs_x = int2bound(&c->x, raw_x - c->x.devmin);
+			abs_y = int2bound(&c->y, c->y.devmax - raw_y);
+			while (raw_n--) {
+				ptest = int2bound(&c->p,
+						  raw2int(f->force_major));
+				if (ptest > PRESSURE_LOW)
+					nmax++;
+				if (ptest > PRESSURE_HIGH)
+					nmin++;
+				f++;
+			}
 		}
 	}

> 
>>> This also fixed these compilation warnings :
>>>
>>>  CC [M]  drivers/input/mouse/bcm5974.o
>>> drivers/input/mouse/bcm5974.c: In function ‘report_tp_state’:
>>> drivers/input/mouse/bcm5974.c:319: warning: ‘raw_y’ may be used uninitialized in this function
>>> drivers/input/mouse/bcm5974.c:319: warning: ‘raw_x’ may be used uninitialized in this function
>>> drivers/input/mouse/bcm5974.c:319: warning: ‘raw_w’ may be used uninitialized in this function
>>>
>>> Signed-off-by: Jaswinder Singh Rajput <jaswinderrajput@xxxxxxxxx>
>>> ---
>>>  drivers/input/mouse/bcm5974.c |    3 ++-
>>>  1 files changed, 2 insertions(+), 1 deletions(-)
>>>
>>> diff --git a/drivers/input/mouse/bcm5974.c b/drivers/input/mouse/bcm5974.c
>>> index 2d8fc0b..171f345 100644
>>> --- a/drivers/input/mouse/bcm5974.c
>>> +++ b/drivers/input/mouse/bcm5974.c
>>> @@ -345,7 +345,8 @@ static int report_tp_state(struct bcm5974 *dev, int size)
>>>  		/* set the integrated button if applicable */
>>>  		if (c->tp_type == TYPE2)
>>>  			ibt = raw2int(dev->tp_data[BUTTON_TYPE2]);
>>> -	}
>>> +	} else
>>> +		raw_w = raw_x = raw_y = 0;
>>>  
>>>  	/* while tracking finger still valid, count all fingers */
>>>  	if (ptest > PRESSURE_LOW && origin) {
>> I would prefer treating raw_p on the same footing here, completing the set of
>> non-obviously initialized variables. It might also make sense to utilize the
>> same initialization technique already used in the code, thus:
>>
> 
> No, then you are wasting cpu cycles and doing double initialization for
> some cases.
> 
>> diff --git a/drivers/input/mouse/bcm5974.c b/drivers/input/mouse/bcm5974.c
>> index 2d8fc0b..2f85876 100644
>> --- a/drivers/input/mouse/bcm5974.c
>> +++ b/drivers/input/mouse/bcm5974.c
>> @@ -316,7 +316,7 @@ static int report_tp_state(struct bcm5974 *dev, int size)
>>  	const struct bcm5974_config *c = &dev->cfg;
>>  	const struct tp_finger *f;
>>  	struct input_dev *input = dev->input;
>> -	int raw_p, raw_w, raw_x, raw_y, raw_n;
>> +	int raw_p = 0, raw_w = 0, raw_x = 0, raw_y = 0, raw_n;
>>  	int ptest = 0, origin = 0, ibt = 0, nmin = 0, nmax = 0;
>>  	int abs_p = 0, abs_w = 0, abs_x = 0, abs_y = 0;
>>
>>
>> I wonder how many cpu cycles in the world are spent making compilers happy.
>>
> 
> It is not compiler mistake it is programming/logic mistakes. We should
> be thankful to compiler to pointing mistakes made by us.

The uninitialized-variable warnings have certainly proved their value many times
over. I was merely reflecting over the fact that the enclosing space of all such
errors could be made smaller by deduction at compile time.

Cheers,
Henrik

--
To unsubscribe from this list: send the line "unsubscribe linux-input" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html

[Index of Archives]     [Linux Media Devel]     [Linux USB Devel]     [Video for Linux]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]     [Linux Wireless Networking]     [Linux Omap]

  Powered by Linux