Browse Source

py-smbus: Fix i2c_smbus_* error propagation

The Python bindings haven't been updated after commit
330bba29f3 ("libi2c: Properly
propagate real error codes on read errors"). This led to erronenous
behavior every time an error other than -1 is returned by i2c_smbus_*
functions.

[JD: Edited description.]

Signed-off-by: Georgii Staroselskii <georgii.staroselskii@emlid.com>
Signed-off-by: Jean Delvare <jdelvare@suse.de>
tags/v4.1
Georgii Staroselskii 7 years ago
committed by Jean Delvare
parent
commit
0e384cf303
  1. 1
      CHANGES
  2. 14
      py-smbus/smbusmodule.c

1
CHANGES

@ -11,6 +11,7 @@ master
Documentation update for DDR4
Verify the CRC of DDR4 data block 1
eeprog: Fix ambiguous parentheses
py-smbus: Fix i2c_smbus_* error propagation
4.0 (2017-10-30)
tools: Fix build with recent compilers (gcc 4.6+)

14
py-smbus/smbusmodule.c

@ -216,7 +216,7 @@ SMBus_read_byte(SMBus *self, PyObject *args)
SMBus_SET_ADDR(self, addr);
if ((result = i2c_smbus_read_byte(self->fd)) == -1) {
if ((result = i2c_smbus_read_byte(self->fd)) < 0) {
PyErr_SetFromErrno(PyExc_IOError);
return NULL;
}
@ -239,7 +239,7 @@ SMBus_write_byte(SMBus *self, PyObject *args)
SMBus_SET_ADDR(self, addr);
if ((result = i2c_smbus_write_byte(self->fd, (__u8)val)) == -1) {
if ((result = i2c_smbus_write_byte(self->fd, (__u8)val)) < 0) {
PyErr_SetFromErrno(PyExc_IOError);
return NULL;
}
@ -263,7 +263,7 @@ SMBus_read_byte_data(SMBus *self, PyObject *args)
SMBus_SET_ADDR(self, addr);
if ((result = i2c_smbus_read_byte_data(self->fd, (__u8)cmd)) == -1) {
if ((result = i2c_smbus_read_byte_data(self->fd, (__u8)cmd)) < 0) {
PyErr_SetFromErrno(PyExc_IOError);
return NULL;
}
@ -287,7 +287,7 @@ SMBus_write_byte_data(SMBus *self, PyObject *args)
SMBus_SET_ADDR(self, addr);
if ((result = i2c_smbus_write_byte_data(self->fd,
(__u8)cmd, (__u8)val)) == -1) {
(__u8)cmd, (__u8)val)) < 0) {
PyErr_SetFromErrno(PyExc_IOError);
return NULL;
}
@ -311,7 +311,7 @@ SMBus_read_word_data(SMBus *self, PyObject *args)
SMBus_SET_ADDR(self, addr);
if ((result = i2c_smbus_read_word_data(self->fd, (__u8)cmd)) == -1) {
if ((result = i2c_smbus_read_word_data(self->fd, (__u8)cmd)) < 0) {
PyErr_SetFromErrno(PyExc_IOError);
return NULL;
}
@ -335,7 +335,7 @@ SMBus_write_word_data(SMBus *self, PyObject *args)
SMBus_SET_ADDR(self, addr);
if ((result = i2c_smbus_write_word_data(self->fd,
(__u8)cmd, (__u16)val)) == -1) {
(__u8)cmd, (__u16)val)) < 0) {
PyErr_SetFromErrno(PyExc_IOError);
return NULL;
}
@ -360,7 +360,7 @@ SMBus_process_call(SMBus *self, PyObject *args)
SMBus_SET_ADDR(self, addr);
if ((result = i2c_smbus_process_call(self->fd,
(__u8)cmd, (__u16)val)) == -1) {
(__u8)cmd, (__u16)val)) < 0) {
PyErr_SetFromErrno(PyExc_IOError);
return NULL;
}

Loading…
Cancel
Save