fix(PISPI): close fd on ioctl error paths

Three ioctl calls after successful open() returned false without
closing the file descriptor, leaking one fd per failed open attempt.
This commit is contained in:
2026-08-06 10:19:18 +03:00
parent 8853d16826
commit 3a39b64d21
+6
View File
@@ -106,18 +106,24 @@ bool PISPI::openDevice() {
ret = ioctl(PRIVATE->fd, SPI_IOC_WR_MODE, &spi_mode); ret = ioctl(PRIVATE->fd, SPI_IOC_WR_MODE, &spi_mode);
if (ret == -1) { if (ret == -1) {
piCoutObj << "can't set spi write mode"; piCoutObj << "can't set spi write mode";
::close(PRIVATE->fd);
PRIVATE->fd = -1;
return false; return false;
} }
// piCoutObj << "set bits" << spi_bits; // piCoutObj << "set bits" << spi_bits;
ret = ioctl(PRIVATE->fd, SPI_IOC_WR_BITS_PER_WORD, &spi_bits); ret = ioctl(PRIVATE->fd, SPI_IOC_WR_BITS_PER_WORD, &spi_bits);
if (ret == -1) { if (ret == -1) {
piCoutObj << "can't set bits per word"; piCoutObj << "can't set bits per word";
::close(PRIVATE->fd);
PRIVATE->fd = -1;
return false; return false;
} }
// piCoutObj << "set speed" << spi_speed; // piCoutObj << "set speed" << spi_speed;
ret = ioctl(PRIVATE->fd, SPI_IOC_WR_MAX_SPEED_HZ, &spi_speed); ret = ioctl(PRIVATE->fd, SPI_IOC_WR_MAX_SPEED_HZ, &spi_speed);
if (ret == -1) { if (ret == -1) {
piCoutObj << "can't set max write speed hz"; piCoutObj << "can't set max write speed hz";
::close(PRIVATE->fd);
PRIVATE->fd = -1;
return false; return false;
} }
piCoutObj << "SPI open" << path() << "speed:" << spi_speed / 1000 << "KHz" piCoutObj << "SPI open" << path() << "speed:" << spi_speed / 1000 << "KHz"