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