inotify: set close-on-exec flag
Added wrapper for inotify_init1() to fd_util.c.
This commit is contained in:
		@@ -35,6 +35,10 @@
 | 
				
			|||||||
#include <sys/socket.h>
 | 
					#include <sys/socket.h>
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#ifdef HAVE_INOTIFY_INIT
 | 
				
			||||||
 | 
					#include <sys/inotify.h>
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#ifndef WIN32
 | 
					#ifndef WIN32
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static int
 | 
					static int
 | 
				
			||||||
@@ -169,3 +173,25 @@ accept_cloexec(int fd, struct sockaddr *address, size_t *address_length_r)
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
	return ret;
 | 
						return ret;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#ifdef HAVE_INOTIFY_INIT
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					int
 | 
				
			||||||
 | 
					inotify_init_cloexec(void)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
						int fd;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#ifdef HAVE_INOTIFY_INIT1
 | 
				
			||||||
 | 
						fd = inotify_init1(IN_CLOEXEC);
 | 
				
			||||||
 | 
						if (fd >= 0 || errno != ENOSYS)
 | 
				
			||||||
 | 
							return fd;
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						fd = inotify_init();
 | 
				
			||||||
 | 
						if (fd >= 0)
 | 
				
			||||||
 | 
							fd_set_cloexec(fd, true);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						return fd;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -50,4 +50,7 @@ socket_cloexec(int domain, int type, int protocol);
 | 
				
			|||||||
int
 | 
					int
 | 
				
			||||||
accept_cloexec(int fd, struct sockaddr *address, size_t *address_length_r);
 | 
					accept_cloexec(int fd, struct sockaddr *address, size_t *address_length_r);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					int
 | 
				
			||||||
 | 
					inotify_init_cloexec(void);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -19,6 +19,7 @@
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
#include "inotify_source.h"
 | 
					#include "inotify_source.h"
 | 
				
			||||||
#include "fifo_buffer.h"
 | 
					#include "fifo_buffer.h"
 | 
				
			||||||
 | 
					#include "fd_util.h"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#include <sys/inotify.h>
 | 
					#include <sys/inotify.h>
 | 
				
			||||||
#include <unistd.h>
 | 
					#include <unistd.h>
 | 
				
			||||||
@@ -105,7 +106,7 @@ mpd_inotify_source_new(mpd_inotify_callback_t callback, void *callback_ctx,
 | 
				
			|||||||
	struct mpd_inotify_source *source =
 | 
						struct mpd_inotify_source *source =
 | 
				
			||||||
		g_new(struct mpd_inotify_source, 1);
 | 
							g_new(struct mpd_inotify_source, 1);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	source->fd = inotify_init();
 | 
						source->fd = inotify_init_cloexec();
 | 
				
			||||||
	if (source->fd < 0) {
 | 
						if (source->fd < 0) {
 | 
				
			||||||
		g_set_error(error_r, mpd_inotify_quark(), errno,
 | 
							g_set_error(error_r, mpd_inotify_quark(), errno,
 | 
				
			||||||
			    "inotify_init() has failed: %s",
 | 
								    "inotify_init() has failed: %s",
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user