From 22f81fbe86e2920658948608ef9e87f8c1a03dc2 Mon Sep 17 00:00:00 2001 From: David Härdeman Date: Tue, 18 Apr 2017 22:00:19 +0200 Subject: Add lirc_close --- rcm-server-lirc.c | 18 +++++++++++++----- rcm-server-lirc.h | 2 ++ 2 files changed, 15 insertions(+), 5 deletions(-) diff --git a/rcm-server-lirc.c b/rcm-server-lirc.c index 150df8b..e9a82a6 100644 --- a/rcm-server-lirc.c +++ b/rcm-server-lirc.c @@ -27,7 +27,7 @@ lirc_write(int fd, const uint32_t *v, unsigned count) l, write(fd, nv, l), errno, strerror(errno)); } -int +static int lirc_read(sd_event_source *s, int fd, uint32_t revents, void *userdata) { struct device *device = userdata; @@ -39,8 +39,7 @@ lirc_read(sd_event_source *s, int fd, uint32_t revents, void *userdata) if (revents & EPOLLHUP) { fprintf(stderr, "lirc connection closed!\n"); - close(fd); - device->lirc_fd = -1; + lirc_close(device); return 0; } @@ -55,6 +54,16 @@ lirc_read(sd_event_source *s, int fd, uint32_t revents, void *userdata) return 0; } +void +lirc_close(struct device *device) +{ + if (device->lirc_fd < 0) + return; + + close(device->lirc_fd); + device->lirc_fd = -1; +} + int lirc_setup(struct device *device, const char *path) { @@ -76,8 +85,7 @@ lirc_setup(struct device *device, const char *path) device->lirc_fd, EPOLLIN, lirc_read, device) < 0) { printf("Failed to add event source for lirc device %s: %s\n", path, strerror(errno)); - close(device->lirc_fd); - device->lirc_fd = -1; + lirc_close(device); return -errno; } diff --git a/rcm-server-lirc.h b/rcm-server-lirc.h index f0bf798..08bb2cb 100644 --- a/rcm-server-lirc.h +++ b/rcm-server-lirc.h @@ -3,6 +3,8 @@ void lirc_write(int fd, const uint32_t *v, unsigned count); +void lirc_close(struct device *device); + int lirc_setup(struct device *device, const char *path); #endif -- cgit v1.2.3