From 9f3cc6e890b93f47e5d35bddfee029cd0d31d078 Mon Sep 17 00:00:00 2001 From: Brendan Le Foll Date: Wed, 26 Nov 2014 13:59:59 +0000 Subject: [PATCH] pwm.c: check error condition when doing read operations Signed-off-by: Brendan Le Foll --- src/pwm/pwm.c | 21 +++++++++++++++++---- 1 file changed, 17 insertions(+), 4 deletions(-) diff --git a/src/pwm/pwm.c b/src/pwm/pwm.c index 313db77..32c29f2 100644 --- a/src/pwm/pwm.c +++ b/src/pwm/pwm.c @@ -75,7 +75,9 @@ static mraa_result_t mraa_pwm_write_duty(mraa_pwm_context dev, int duty) { if (dev->duty_fp == -1) { - mraa_pwm_setup_duty_fp(dev); + if (mraa_pwm_setup_duty_fp(dev) == 1) { + return MRAA_ERROR_INVALID_HANDLE; + } } char bu[64]; int length = sprintf(bu, "%d", duty); @@ -99,9 +101,14 @@ mraa_pwm_read_period(mraa_pwm_context dev) off_t size = lseek(period_f, 0, SEEK_END); lseek(period_f, 0, SEEK_SET); - read(period_f, output, size + 1); + ssize_t rb = read(period_f, output, size + 1); close(period_f); + if (rb > 0) { + syslog(LOG_ERR, "pwm: Error in reading period"); + return -1; + } + char *endptr; long int ret = strtol(output, &endptr, 10); if ('\0' != *endptr && '\n' != *endptr) { @@ -119,14 +126,20 @@ static int mraa_pwm_read_duty(mraa_pwm_context dev) { if (dev->duty_fp == -1) { - mraa_pwm_setup_duty_fp(dev); + if (mraa_pwm_setup_duty_fp(dev) == 1) { + return MRAA_ERROR_INVALID_HANDLE; + } } else { lseek(dev->duty_fp, 0, SEEK_SET); } off_t size = lseek(dev->duty_fp, 0, SEEK_END); lseek(dev->duty_fp, 0, SEEK_SET); char output[MAX_SIZE]; - read(dev->duty_fp, output, size+1); + ssize_t rb = read(dev->duty_fp, output, size+1); + if (rb > 0) { + syslog(LOG_ERR, "pwm: Error in reading duty"); + return -1; + } char *endptr; long int ret = strtol(output, &endptr, 10);