Mercurial > hg-stable
changeset 28855:f5764e177bbe
chg: extract the logic of setting FD_CLOEXEC to a utility function
Setting FD_CLOEXEC is useful for other fds such like lockfd and sockdirfd,
move the logic from hgc_open to util.
author | Jun Wu <quark@fb.com> |
---|---|
date | Mon, 11 Apr 2016 00:17:17 +0100 |
parents | ddef14468952 |
children | 0d530299acf2 |
files | contrib/chg/hgclient.c contrib/chg/util.c contrib/chg/util.h |
diffstat | 3 files changed, 12 insertions(+), 5 deletions(-) [+] |
line wrap: on
line diff
--- a/contrib/chg/hgclient.c Sun Apr 10 03:14:32 2016 +0100 +++ b/contrib/chg/hgclient.c Mon Apr 11 00:17:17 2016 +0100 @@ -418,11 +418,7 @@ /* don't keep fd on fork(), so that it can be closed when the parent * process get terminated. */ - int flags = fcntl(fd, F_GETFD); - if (flags < 0) - abortmsgerrno("cannot get flags of socket"); - if (fcntl(fd, F_SETFD, flags | FD_CLOEXEC) < 0) - abortmsgerrno("cannot set flags of socket"); + fsetcloexec(fd); struct sockaddr_un addr; addr.sun_family = AF_UNIX;
--- a/contrib/chg/util.c Sun Apr 10 03:14:32 2016 +0100 +++ b/contrib/chg/util.c Mon Apr 11 00:17:17 2016 +0100 @@ -8,6 +8,7 @@ */ #include <errno.h> +#include <fcntl.h> #include <signal.h> #include <stdarg.h> #include <stdio.h> @@ -91,6 +92,15 @@ abortmsgerrno("failed to fchdir"); } +void fsetcloexec(int fd) +{ + int flags = fcntl(fd, F_GETFD); + if (flags < 0) + abortmsgerrno("cannot get flags of fd %d", fd); + if (fcntl(fd, F_SETFD, flags | FD_CLOEXEC) < 0) + abortmsgerrno("cannot set flags of fd %d", fd); +} + void *mallocx(size_t size) { void *result = malloc(size);
--- a/contrib/chg/util.h Sun Apr 10 03:14:32 2016 +0100 +++ b/contrib/chg/util.h Mon Apr 11 00:17:17 2016 +0100 @@ -24,6 +24,7 @@ void debugmsg(const char *fmt, ...) PRINTF_FORMAT_; void fchdirx(int dirfd); +void fsetcloexec(int fd); void *mallocx(size_t size); void *reallocx(void *ptr, size_t size);