mirror of
https://gitlab.freedesktop.org/dbus/dbus.git
synced 2026-01-08 04:40:15 +01:00
bus_set_watched_dirs: portability patch for systems which lack O_CLOEXEC
Bug: https://bugs.freedesktop.org/show_bug.cgi?id=77032 Reviewed-by: Simon McVittie <simon.mcvittie@collabora.co.uk>
This commit is contained in:
parent
d002a430cc
commit
5d91f615d1
1 changed files with 17 additions and 0 deletions
|
|
@ -202,6 +202,9 @@ bus_set_watched_dirs (BusContext *context, DBusList **directories)
|
|||
DBusList *link;
|
||||
int i, j, fd;
|
||||
struct kevent ev;
|
||||
#ifdef O_CLOEXEC
|
||||
dbus_bool_t cloexec_done = 0;
|
||||
#endif
|
||||
|
||||
if (!_init_kqueue (context))
|
||||
goto out;
|
||||
|
|
@ -259,7 +262,15 @@ bus_set_watched_dirs (BusContext *context, DBusList **directories)
|
|||
/* FIXME - less lame error handling for failing to add a watch;
|
||||
* we may need to sleep.
|
||||
*/
|
||||
#ifdef O_CLOEXEC
|
||||
fd = open (new_dirs[i], O_RDONLY | O_CLOEXEC);
|
||||
cloexec_done = (fd >= 0);
|
||||
|
||||
if (fd < 0 && errno == EINVAL)
|
||||
#endif
|
||||
{
|
||||
fd = open (new_dirs[i], O_RDONLY);
|
||||
}
|
||||
if (fd < 0)
|
||||
{
|
||||
if (errno != ENOENT)
|
||||
|
|
@ -274,6 +285,12 @@ bus_set_watched_dirs (BusContext *context, DBusList **directories)
|
|||
continue;
|
||||
}
|
||||
}
|
||||
#ifdef O_CLOEXEC
|
||||
if (!cloexec_done)
|
||||
#endif
|
||||
{
|
||||
_dbus_fd_set_close_on_exec (fd);
|
||||
}
|
||||
|
||||
EV_SET (&ev, fd, EVFILT_VNODE, EV_ADD | EV_ENABLE | EV_CLEAR,
|
||||
NOTE_DELETE | NOTE_EXTEND | NOTE_WRITE | NOTE_RENAME, 0, 0);
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue