backlight: Move the fd out of the select range

Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
This commit is contained in:
Chris Wilson 2014-08-21 07:21:59 +01:00
parent 726f1a38a5
commit 61ec162dc9
3 changed files with 26 additions and 1 deletions

View File

@ -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;
}

View File

@ -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;

View File

@ -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);