summaryrefslogtreecommitdiff
path: root/src/ex_cmds2.c
diff options
context:
space:
mode:
authorBram Moolenaar <Bram@vim.org>2010-01-19 16:22:03 +0100
committerBram Moolenaar <Bram@vim.org>2010-01-19 16:22:03 +0100
commit6b29b0e809b14e41def8976190d24f0babddd95c (patch)
treed5e49f362a0c502d5ebbbb73d756d8206b450b92 /src/ex_cmds2.c
parent3d63e3f1607b7081744898b9b1021417e4580df8 (diff)
downloadvim-git-6b29b0e809b14e41def8976190d24f0babddd95c.tar.gz
updated for version 7.2.338v7.2.338
Problem: Part of FD_CLOEXEC change is missing. Solution: Include source file skipped because of typo.
Diffstat (limited to 'src/ex_cmds2.c')
-rw-r--r--src/ex_cmds2.c23
1 files changed, 19 insertions, 4 deletions
diff --git a/src/ex_cmds2.c b/src/ex_cmds2.c
index 39ed496fc..6adb07188 100644
--- a/src/ex_cmds2.c
+++ b/src/ex_cmds2.c
@@ -2802,20 +2802,35 @@ source_level(cookie)
static char_u *get_one_sourceline __ARGS((struct source_cookie *sp));
-#if defined(WIN32) && defined(FEAT_CSCOPE)
+#if (defined(WIN32) && defined(FEAT_CSCOPE)) || defined(HAVE_FD_CLOEXEC)
+# define USE_FOPEN_NOINH
static FILE *fopen_noinh_readbin __ARGS((char *filename));
/*
* Special function to open a file without handle inheritance.
+ * When possible the handle is closed on exec().
*/
static FILE *
fopen_noinh_readbin(filename)
char *filename;
{
- int fd_tmp = mch_open(filename, O_RDONLY | O_BINARY | O_NOINHERIT, 0);
+ int fd_tmp = mch_open(filename, O_RDONLY
+# ifdef WIN32
+ O_BINARY | O_NOINHERIT
+# endif
+ , 0);
if (fd_tmp == -1)
return NULL;
+
+# ifdef HAVE_FD_CLOEXEC
+ {
+ int fdflags = fcntl(fd_tmp, F_GETFD);
+ if (fdflags >= 0 && (fdflags & FD_CLOEXEC) == 0)
+ fcntl(fd_tmp, F_SETFD, fdflags | FD_CLOEXEC);
+ }
+# endif
+
return fdopen(fd_tmp, READBIN);
}
#endif
@@ -2895,7 +2910,7 @@ do_source(fname, check_other, is_vimrc)
apply_autocmds(EVENT_SOURCEPRE, fname_exp, fname_exp, FALSE, curbuf);
#endif
-#if defined(WIN32) && defined(FEAT_CSCOPE)
+#ifdef USE_FOPEN_NOINH
cookie.fp = fopen_noinh_readbin((char *)fname_exp);
#else
cookie.fp = mch_fopen((char *)fname_exp, READBIN);
@@ -2916,7 +2931,7 @@ do_source(fname, check_other, is_vimrc)
*p = '.';
else
*p = '_';
-#if defined(WIN32) && defined(FEAT_CSCOPE)
+#ifdef USE_FOPEN_NOINH
cookie.fp = fopen_noinh_readbin((char *)fname_exp);
#else
cookie.fp = mch_fopen((char *)fname_exp, READBIN);