Applied, thanks!
On Mon, Mar 19, 2018 at 10:31 AM, <mark.marsh...@omicronenergy.com> wrote: > From: Mark Marshall <mark.marsh...@omicronenergy.com> > > This should result in smaller code, and is also the preferred way to set > the CLOEXEC bit (The bit should ideally always be set when the file > handle is created, not afterwards). > > Signed-off-by: Mark Marshall <mark.marsh...@omicronenergy.com> > --- > shell/ash.c | 28 ++++++++++++++++++++++++++-- > 1 file changed, 26 insertions(+), 2 deletions(-) > > diff --git a/shell/ash.c b/shell/ash.c > index 6cf980c..0b9e71f 100644 > --- a/shell/ash.c > +++ b/shell/ash.c > @@ -3969,12 +3969,18 @@ setjobctl(int on) > goto out; > } > /* fd is a tty at this point */ > +#if defined(F_DUPFD_CLOEXEC) > + fd = fcntl(fd, F_DUPFD_CLOEXEC, 10); > +#else > fd = fcntl(fd, F_DUPFD, 10); > +#endif > if (ofd >= 0) /* if it is "/dev/tty", close. If 0/1/2, don't > */ > close(ofd); > if (fd < 0) > goto out; /* F_DUPFD failed */ > +#if !defined(F_DUPFD_CLOEXEC) > close_on_exec_on(fd); > +#endif > while (1) { /* while we are in the background */ > pgrp = tcgetpgrp(fd); > if (pgrp < 0) { > @@ -5424,13 +5430,19 @@ savefd(int from) > int newfd; > int err; > > +#if defined(F_DUPFD_CLOEXEC) > + newfd = fcntl(from, F_DUPFD_CLOEXEC, 10); > +#else > newfd = fcntl(from, F_DUPFD, 10); > +#endif > err = newfd < 0 ? errno : 0; > if (err != EBADF) { > if (err) > ash_msg_and_raise_perror("%d", from); > close(from); > - fcntl(newfd, F_SETFD, FD_CLOEXEC); > +#if !defined(F_DUPFD_CLOEXEC) > + close_on_exec_on(newfd); > +#endif > } > > return newfd; > @@ -5473,7 +5485,11 @@ xdup_CLOEXEC_and_close(int fd, int avoid_fd) > { > int newfd; > repeat: > +#if defined(F_DUPFD_CLOEXEC) > + newfd = fcntl(fd, F_DUPFD_CLOEXEC, avoid_fd + 1); > +#else > newfd = fcntl(fd, F_DUPFD, avoid_fd + 1); > +#endif > if (newfd < 0) { > if (errno == EBUSY) > goto repeat; > @@ -5484,7 +5500,9 @@ xdup_CLOEXEC_and_close(int fd, int avoid_fd) > return fd; > ash_msg_and_raise_perror("%d", newfd); > } > - fcntl(newfd, F_SETFD, FD_CLOEXEC); > +#if !defined(F_DUPFD_CLOEXEC) > + close_on_exec_on(newfd); > +#endif > close(fd); > return newfd; > } > @@ -10754,7 +10772,11 @@ setinputfile(const char *fname, int flags) > int fd; > > INT_OFF; > +#if defined(O_CLOEXEC) > + fd = open(fname, O_RDONLY | O_CLOEXEC); > +#else > fd = open(fname, O_RDONLY); > +#endif > if (fd < 0) { > if (flags & INPUT_NOFILE_OK) > goto out; > @@ -10763,8 +10785,10 @@ setinputfile(const char *fname, int flags) > } > if (fd < 10) > fd = savefd(fd); > +#if !defined(O_CLOEXEC) > else > close_on_exec_on(fd); > +#endif > setinputfd(fd, flags & INPUT_PUSH_FILE); > out: > INT_ON; > -- > 2.7.4 > > _______________________________________________ > busybox mailing list > busybox@busybox.net > http://lists.busybox.net/mailman/listinfo/busybox _______________________________________________ busybox mailing list busybox@busybox.net http://lists.busybox.net/mailman/listinfo/busybox