From a729afa9ec504b5b3de2a6e3f2110f1b68118a68 Mon Sep 17 00:00:00 2001
From: Ludwig Ortmann <ludwig.ortmann@fu-berlin.de>
Date: Sat, 2 May 2015 08:35:38 +0200
Subject: [PATCH] drivers/isl29020: fix return value integer error

Problem:

Since `i2c_read_reg` returns (signed) `int` values, the result can
be negative. However, the variable used to save the result is unsigned.

Fix:

Add and use a signed variable for return value storing.
---
 drivers/isl29020/isl29020.c | 7 ++++---
 1 file changed, 4 insertions(+), 3 deletions(-)

diff --git a/drivers/isl29020/isl29020.c b/drivers/isl29020/isl29020.c
index f687039c2a..f0a0a4f93d 100644
--- a/drivers/isl29020/isl29020.c
+++ b/drivers/isl29020/isl29020.c
@@ -57,13 +57,14 @@ int isl29020_read(isl29020_t *dev)
 {
     char low, high;
     uint16_t res;
+    int ret;
 
     i2c_acquire(dev->i2c);
     /* read lighting value */
-    res = i2c_read_reg(dev->i2c, dev->address, ISL29020_REG_LDATA, &low);
-    res += i2c_read_reg(dev->i2c, dev->address, ISL29020_REG_HDATA, &high);
+    ret = i2c_read_reg(dev->i2c, dev->address, ISL29020_REG_LDATA, &low);
+    ret += i2c_read_reg(dev->i2c, dev->address, ISL29020_REG_HDATA, &high);
     i2c_release(dev->i2c);
-    if (res < 2) {
+    if (ret < 2) {
         return -1;
     }
     res = (high << 8) | low;
-- 
GitLab