#define MAX_ERR_LEN 255
#define MAX_BUF_LEN 64
-#define CHECK_ERROR(expr) \
+#define IF_ERROR_RETURN(expr, func...) \
do { \
if (expr) { \
- if (errno == EAGAIN) \
+ int temp = errno; \
+ func; \
+ if (temp == EAGAIN) \
return PERIPHERAL_ERROR_TRY_AGAIN; \
char errmsg[MAX_ERR_LEN]; \
- strerror_r(errno, errmsg, sizeof(errmsg)); \
+ strerror_r(temp, errmsg, sizeof(errmsg)); \
_E("Failed the %s(%d) function. errmsg: %s", __FUNCTION__, __LINE__, errmsg); \
return PERIPHERAL_ERROR_IO_ERROR; \
} \
_D("gpiopin : %d", gpiopin);
fd = open(SYSFS_GPIO_DIR "/export", O_WRONLY);
- CHECK_ERROR(fd < 0);
+ IF_ERROR_RETURN(fd < 0);
len = snprintf(gpio_export, MAX_BUF_LEN, "%d", gpiopin);
status = write(fd, gpio_export, len);
+ IF_ERROR_RETURN(status != len, close(fd));
close(fd);
- CHECK_ERROR(status != len);
return 0;
}
_D("gpiopin : %d", gpiopin);
fd = open(SYSFS_GPIO_DIR "/unexport", O_WRONLY);
- CHECK_ERROR(fd < 0);
+ IF_ERROR_RETURN(fd < 0);
len = snprintf(gpio_unexport, MAX_BUF_LEN, "%d", gpiopin);
status = write(fd, gpio_unexport, len);
+ IF_ERROR_RETURN(status != len, close(fd));
close(fd);
- CHECK_ERROR(status != len);
return 0;
}
snprintf(i2c_dev, MAX_BUF_LEN, SYSFS_I2C_DIR"-%d", bus);
new_fd = open(i2c_dev, O_RDWR);
- CHECK_ERROR(new_fd < 0);
+ IF_ERROR_RETURN(new_fd < 0);
_D("fd : %d", new_fd);
*fd = new_fd;
RETVM_IF(fd < 0, -EINVAL, "Invalid fd");
status = close(fd);
- CHECK_ERROR(status != 0);
+ IF_ERROR_RETURN(status != 0);
return 0;
}
RETVM_IF(fd < 0, -EINVAL, "Invalid fd");
status = ioctl(fd, I2C_SLAVE, address);
- CHECK_ERROR(status != 0);
+ IF_ERROR_RETURN(status != 0, close(fd));
+ close(fd);
return 0;
}
\ No newline at end of file
snprintf(pwm_dev, MAX_BUF_LEN, SYSFS_PWM_PATH "/pwmchip%d/export", chip);
fd = open(pwm_dev, O_WRONLY);
- CHECK_ERROR(fd < 0);
+ IF_ERROR_RETURN(fd < 0);
len = snprintf(pwm_buf, MAX_BUF_LEN, "%d", pin);
status = write(fd, pwm_buf, len);
+ IF_ERROR_RETURN(status != len, close(fd));
close(fd);
- CHECK_ERROR(status != len);
return 0;
}
snprintf(pwm_dev, MAX_BUF_LEN, SYSFS_PWM_PATH "/pwmchip%d/unexport", chip);
fd = open(pwm_dev, O_WRONLY);
- CHECK_ERROR(fd < 0);
+ IF_ERROR_RETURN(fd < 0);
len = snprintf(pwm_buf, MAX_BUF_LEN, "%d", pin);
status = write(fd, pwm_buf, len);
+ IF_ERROR_RETURN(status != len, close(fd));
close(fd);
- CHECK_ERROR(status != len);
return 0;
}
snprintf(spi_dev, MAX_BUF_LEN, SYSFS_SPI_DIR"%d.%d", bus, cs);
new_fd = open(spi_dev, O_RDWR);
- CHECK_ERROR(new_fd < 0);
+ IF_ERROR_RETURN(new_fd < 0);
_D("fd : %d", new_fd);
*fd = new_fd;
RETVM_IF(fd < 0, -EINVAL, "Invalid fd");
status = close(fd);
- CHECK_ERROR(status != 0);
+ IF_ERROR_RETURN(status != 0);
return 0;
}
_D("uart_dev : %s", uart_dev);
fd = open(uart_dev, O_RDWR | O_NOCTTY | O_NONBLOCK);
- CHECK_ERROR(fd < 0);
+ IF_ERROR_RETURN(fd < 0);
*file_hndl = fd;
return 0;
return -EINVAL;
}
- status = tcflush(file_hndl, TCIOFLUSH);
- CHECK_ERROR(status != 0);
-
status = close(file_hndl);
- CHECK_ERROR(status != 0);
+ IF_ERROR_RETURN(status != 0);
return 0;
}
\ No newline at end of file