diff options
author | Chris Wilson <chris@chris-wilson.co.uk> | 2014-08-21 07:21:59 +0100 |
---|---|---|
committer | Chris Wilson <chris@chris-wilson.co.uk> | 2014-08-21 07:56:44 +0100 |
commit | 61ec162dc9f4204e26e7786ef26e7abf9ed37ed2 (patch) | |
tree | c7dc2d88e65ef845dfa3e02f976e6797c7954210 | |
parent | 726f1a38a572a8a6121e5194269fb549c363d9f6 (diff) |
backlight: Move the fd out of the select range
Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
-rw-r--r-- | src/backlight.c | 2 | ||||
-rw-r--r-- | src/fd.c | 24 | ||||
-rw-r--r-- | src/fd.h | 1 |
3 files changed, 26 insertions, 1 deletions
diff --git a/src/backlight.c b/src/backlight.c index bb53abae..129afea6 100644 --- a/src/backlight.c +++ b/src/backlight.c @@ -271,7 +271,7 @@ enum backlight_type backlight_exists(const char *iface) static int __backlight_init(struct backlight *b, char *iface, int fd) { - b->fd = fd_set_cloexec(fd_set_nonblock(fd)); + b->fd = fd_move_cloexec(fd_set_nonblock(fd)); b->iface = iface; return 1; } @@ -31,8 +31,32 @@ #include <fcntl.h> #include <unistd.h> +#include <misc.h> /* MAXCLIENTS */ + #include "fd.h" +int fd_move_cloexec(int fd) +{ + int newfd; + + newfd = fcntl(fd, +#ifdef F_DUPFD_CLOEXEC + F_DUPFD_CLOEXEC, +#else + F_DUPFD, +#endif + MAXCLIENTS); + if (newfd < 0) + return fd; + +#ifndef F_DUPFD_CLOEXEC + newfd = fd_set_cloexec(newfd); +#endif + + close(fd); + return newfd; +} + int fd_set_cloexec(int fd) { int flags; @@ -27,6 +27,7 @@ #ifndef FD_H #define FD_H +int fd_move_cloexec(int fd); int fd_set_cloexec(int fd); int fd_set_nonblock(int fd); |