diff options
author | Bartosz Golaszewski | 2015-10-27 17:15:04 +0100 |
---|---|---|
committer | Denys Vlasenko | 2015-11-01 20:55:09 +0100 |
commit | 74bb9d5e63b0928ceac57fedd4a2d383129ade7d (patch) | |
tree | df843f9e83ff4986287cc9e885ab59b1506296f7 | |
parent | 1fe75b8ef10933d047f7ab6060d4710a39611e92 (diff) | |
download | busybox-74bb9d5e63b0928ceac57fedd4a2d383129ade7d.zip busybox-74bb9d5e63b0928ceac57fedd4a2d383129ade7d.tar.gz |
i2cdump: bail-out if block read fails
We should bail-out if i2c_smbus_read_block_data() or
i2c_smbus_read_i2c_block_data() return 0 or less. Add the missing check
for the former and fix the existing for the latter.
Signed-off-by: Bartosz Golaszewski <bartekgola@gmail.com>
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
-rw-r--r-- | miscutils/i2c_tools.c | 13 |
1 files changed, 8 insertions, 5 deletions
diff --git a/miscutils/i2c_tools.c b/miscutils/i2c_tools.c index 6d221e9..7be4890 100644 --- a/miscutils/i2c_tools.c +++ b/miscutils/i2c_tools.c @@ -724,16 +724,16 @@ static int read_block_data(int buf_fd, int mode, int *block) int res, blen = 0, tmp, i; if (mode == I2C_SMBUS_BLOCK_DATA) { - res = i2c_smbus_read_block_data(buf_fd, 0, cblock); - blen = res; + blen = i2c_smbus_read_block_data(buf_fd, 0, cblock); + if (blen <= 0) + goto fail; } else { for (res = 0; res < I2CDUMP_NUM_REGS; res += tmp) { tmp = i2c_smbus_read_i2c_block_data( buf_fd, res, I2C_SMBUS_BLOCK_MAX, cblock + res); - if (tmp < 0) { - bb_error_msg_and_die("block read failed"); - } + if (tmp <= 0) + goto fail; } if (res >= I2CDUMP_NUM_REGS) @@ -748,6 +748,9 @@ static int read_block_data(int buf_fd, int mode, int *block) } return blen; + + fail: + bb_error_msg_and_die("block read failed"); } /* Dump all but word data. */ |