From 59973da9cafd6a57bec5bd6fae267859e6b622a6 Mon Sep 17 00:00:00 2001 From: Gregory Nutt Date: Thu, 2 Jun 2016 06:58:45 -0600 Subject: [PATCH] apps/examples/alarm: ioctl call was clobbering file descriptor. --- examples/alarm/alarm_main.c | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/examples/alarm/alarm_main.c b/examples/alarm/alarm_main.c index 7bfb4870b..9a2626c30 100644 --- a/examples/alarm/alarm_main.c +++ b/examples/alarm/alarm_main.c @@ -279,6 +279,7 @@ int alarm_main(int argc, FAR char *argv[]) /* Open the RTC driver */ printf("Opening %s\n", CONFIG_EXAMPLES_ALARM_DEVPATH); + fd = open(CONFIG_EXAMPLES_ALARM_DEVPATH, O_WRONLY); if (fd < 0) { @@ -297,17 +298,20 @@ int alarm_main(int argc, FAR char *argv[]) setrel.sigvalue.sival_int = alarmid; - fd = ioctl(fd, RTC_SET_RELATIVE, (unsigned long)((uintptr_t)&setrel)); - if (fd < 0) + ret = ioctl(fd, RTC_SET_RELATIVE, (unsigned long)((uintptr_t)&setrel)); + if (ret < 0) { int errcode = errno; + fprintf(stderr, "ERROR: RTC_SET_RELATIVE ioctl failed: %d\n", errcode); + (void)close(fd); return EXIT_FAILURE; } printf("Alarm %d set in %lu seconds\n", alarmid, seconds); + (void)close(fd); return EXIT_SUCCESS; }