]> Zhao Yanbai Git Server - minix.git/commitdiff
VFS: add ability to open files O_CLOEXEC 56/356/3
authorThomas Veerman <thomas@minix3.org>
Thu, 10 Jan 2013 15:31:30 +0000 (15:31 +0000)
committerThomas Veerman <thomas@minix3.org>
Thu, 28 Feb 2013 10:08:53 +0000 (10:08 +0000)
.adjust libc to make use of it (undo __minix diff)

Change-Id: I90a1aa219fcd1b12b6bc60e72176f326eac8184a

13 files changed:
lib/libc/citrus/citrus_mmap.c
lib/libc/db/recno/rec_open.c
lib/libc/gen/fts.c
lib/libc/gen/initdir.c
lib/libc/gen/opendir.c
lib/libc/gen/popen.c
lib/libc/stdio/flags.c
lib/libc/sys/adjtime.c
lib/libc/sys/clock_settime.c
lib/libc/sys/ntp_adjtime.c
lib/libc/sys/settimeofday.c
servers/vfs/open.c
sys/sys/fcntl.h

index 3f338faf712bba2d6ac9b391d3024b65a33db1b7..53dc659303b0ebbe6af60fc917d35ea3c594554a 100644 (file)
@@ -46,10 +46,6 @@ __RCSID("$NetBSD: citrus_mmap.c,v 1.4 2011/10/15 23:00:01 christos Exp $");
 #include "citrus_region.h"
 #include "citrus_mmap.h"
 
-#if defined(__minix) && !defined(O_CLOEXEC)
-#define O_CLOEXEC 0
-#endif
-
 int
 _citrus_map_file(struct _citrus_region * __restrict r,
     const char * __restrict path)
index fa5237572d4ab2ef3aac707550f2faa8a2b69ad2..cc1863fa14d0089f0869ce205a59dbd9fc9db736 100644 (file)
@@ -70,15 +70,8 @@ __rec_open(const char *fname, int flags, mode_t mode, const RECNOINFO *openinfo,
        dbp = NULL;
        /* Open the user's file -- if this fails, we're done. */
        if (fname != NULL) {
-#ifndef O_CLOEXEC
-#define O_CLOEXEC 0
-#endif
                if ((rfd = open(fname, flags | O_CLOEXEC, mode)) == -1)
                        return NULL;
-#if O_CLOEXEC == 0
-               if (fcntl(rfd, F_SETFD, FD_CLOEXEC) == -1)
-                       goto err;
-#endif
        }
 
        /* Create a btree in memory (backed by disk). */
index 16af0d43b1f15acdfcfc80ef924af6058d7bada7..b83b0ab72a07e155349c552e35186fd4cbce1e6e 100644 (file)
@@ -213,9 +213,6 @@ fts_open(char * const *argv, int options,
         * and ".." are all fairly nasty problems.  Note, if we can't get the
         * descriptor we run anyway, just more slowly.
         */
-#ifndef O_CLOEXEC
-#define O_CLOEXEC 0
-#endif
        if (!ISSET(FTS_NOCHDIR)) {
                if ((sp->fts_rfd = open(".", O_RDONLY | O_CLOEXEC, 0)) == -1)
                        SET(FTS_NOCHDIR);
index 2a6e74dcf7279da4dedaf85431429aacadead639..8c1785153e718f156b862d50599c70c6933b47c1 100644 (file)
@@ -42,10 +42,6 @@ __RCSID("$NetBSD: initdir.c,v 1.3 2012/03/13 21:13:36 christos Exp $");
 #include <sys/featuretest.h>
 #include <sys/types.h>
 
-#if !defined(O_CLOEXEC)
-#define O_CLOEXEC 0
-#endif
-
 #endif
 
 #include "reentrant.h"
index 2229dfdefa71fb5d7d542def89c0141cd31ae73e..787f513ceb45d8276a981062adb91b705d93957e 100644 (file)
@@ -45,10 +45,6 @@ __RCSID("$NetBSD: opendir.c,v 1.38 2011/10/15 23:00:01 christos Exp $");
 #include <sys/cdefs.h>
 #include <sys/types.h>
 
-#if !defined(O_CLOEXEC)
-#define O_CLOEXEC 0
-#endif
-
 #endif
 
 #include "extern.h"
@@ -94,12 +90,6 @@ __opendir2(const char *name, int flags)
 
        if ((fd = open(name, O_RDONLY | O_NONBLOCK | O_CLOEXEC)) == -1)
                return NULL;
-#if defined(__minix)   
-       if (fcntl(fd, F_SETFD, FD_CLOEXEC) == -1) {     
-           close(fd);
-           return NULL;
-       }
-#endif /* defined(__minix) */
 
        return __opendir_common(fd, name, flags);
 }
index aa58d84938b6a85a9769a5852df961469fed2d64..593e346315ef5ce50c0cf0438b8a41d0ed7776c4 100644 (file)
@@ -59,10 +59,6 @@ __RCSID("$NetBSD: popen.c,v 1.32 2012/06/25 22:32:43 abs Exp $");
 #include "env.h"
 #include "reentrant.h"
 
-#if defined(__minix) && !defined(O_CLOEXEC)
-#define O_CLOEXEC 0
-#endif
-
 #ifdef __weak_alias
 __weak_alias(popen,_popen)
 __weak_alias(pclose,_pclose)
index a0a2d5a4ad092f73565db99db3ba970e2a611094..1892d02e5e81c7db90d9a7402099ac93892a9521 100644 (file)
@@ -49,10 +49,6 @@ __RCSID("$NetBSD: flags.c,v 1.16 2012/03/15 18:22:30 christos Exp $");
 #include "reentrant.h"
 #include "local.h"
 
-#if defined(__minix) && !defined(O_CLOEXEC)
-#define O_CLOEXEC 0
-#endif
-
 /*
  * Return the (stdio) flags for a given mode.  Store the flags
  * to be passed to an open() syscall through *optr.
index b45f516b5a4da164f431d5043333dbc98287df38..1f96c7306a9d22ed12d9d9539d475dcc31726562 100644 (file)
@@ -49,10 +49,6 @@ __RCSID("$NetBSD: adjtime.c,v 1.12 2011/10/15 23:00:02 christos Exp $");
 
 #include <sys/clockctl.h>
  
-#if defined(__minix) && !defined(O_CLOEXEC)
-#define O_CLOEXEC 0
-#endif
-
 extern int __clockctl_fd;
 
 int ____adjtime50(const struct timeval *, struct timeval *);
index 203347dbd3bb209ef6050faa35ece6600a011ed1..a1770d7bb4dd306b562d46f47059b8b6528886e8 100644 (file)
@@ -51,10 +51,6 @@ __RCSID("$NetBSD: clock_settime.c,v 1.12 2011/10/15 23:00:02 christos Exp $");
 
 #include <sys/clockctl.h>
  
-#if defined(__minix) && !defined(O_CLOEXEC)
-#define O_CLOEXEC 0
-#endif
-
 extern int __clockctl_fd;
 
 int ____clock_settime50(clockid_t, const struct timespec *);
index d0ef35fb938622c8abc5f704ae29763cbf147176..efe0ddb86b6bd91dd4f6b41b438958dd5821b1ec 100644 (file)
@@ -55,10 +55,6 @@ __RCSID("$NetBSD: ntp_adjtime.c,v 1.13 2012/03/20 16:26:12 matt Exp $");
 __weak_alias(ntp_adjtime,_ntp_adjtime)
 #endif
 
-#if defined(__minix) && !defined(O_CLOEXEC)
-#define O_CLOEXEC 0
-#endif
-
 extern int __clockctl_fd;
 
 int __ntp_adjtime(struct timex *);
index 12f131b7543e97dffd84ce787ded596a9a4235c0..2bc29b43d95f2ddfced32a4e8594ea76f8ade4a0 100644 (file)
@@ -51,10 +51,6 @@ __RCSID("$NetBSD: settimeofday.c,v 1.14 2011/10/15 23:00:02 christos Exp $");
 #include <time.h>
 #include <unistd.h>
  
-#if defined(__minix) && !defined(O_CLOEXEC)
-#define O_CLOEXEC 0
-#endif
-
 int __clockctl_fd = -1;
 
 int ____settimeofday50(const struct timeval *, const void *);
index fc726955ba73d89d18f22a36764a1c3ddc86c74d..91e6713b00a7ebbecba20fbbe46ab4c918814eaf 100644 (file)
@@ -160,6 +160,8 @@ int common_open(char path[PATH_MAX], int oflags, mode_t omode)
   filp->filp_count = 1;
   filp->filp_vno = vp;
   filp->filp_flags = oflags;
+  if (oflags & O_CLOEXEC)
+       FD_SET(scratch(fp).file.fd_nr, &fp->fp_cloexec_set);
 
   /* Only do the normal open code if we didn't just create the file. */
   if (exist) {
index 695b715a6b27b1c5f114c1371e5c86bcb0105612..fcfaa9ad59b8d17b290488eeba12d21ca2f526db 100644 (file)
@@ -72,6 +72,7 @@
 #define O_REOPEN      010000   /* automatically re-open device after driver
                                 * restart
                                 */
+#define O_CLOEXEC     020000   /* close on exec */
 
 
 #ifndef __minix  /* NOT SUPPORTED! */