summaryrefslogtreecommitdiff
path: root/perlio.c
diff options
context:
space:
mode:
authorAbigail <abigail@abigail.be>2018-01-18 17:11:15 +0100
committerAbigail <abigail@abigail.be>2018-01-18 18:30:41 +0100
commit523d71b314dc75bd212794cc8392eab8267ea744 (patch)
treeaf9674cab1b09d49407f5220121f0f38cbcebd04 /perlio.c
parent408956da6c7e0cd9dd2443723d668230c6d6675a (diff)
downloadperl-523d71b314dc75bd212794cc8392eab8267ea744.tar.gz
Revert "make PerlIO handle FD_CLOEXEC"
This reverts commit 2cdf406af42834c46ef407517daab0734f7066fc. The reason for the revert is that with this commit, perl fails to compile on darwin (or at least, one some versions of it): ./miniperl -Ilib make_ext.pl lib/auto/DB_File/DB_File.bundle MAKE="/Applications/Xcode.app/Contents/Developer/usr/bin/make" LIBPERL_A=libperl.a LINKTYPE=dynamic Parsing config.in... Looks Good. dyld: lazy symbol binding failed: Symbol not found: _mkostemp Referenced from: /private/tmp/perl/cpan/DB_File/../../miniperl Expected in: flat namespace dyld: Symbol not found: _mkostemp Referenced from: /private/tmp/perl/cpan/DB_File/../../miniperl Expected in: flat namespace Unsuccessful Makefile.PL(cpan/DB_File): code=5 at make_ext.pl line 518. make: *** [lib/auto/DB_File/DB_File.bundle] Error 2
Diffstat (limited to 'perlio.c')
-rw-r--r--perlio.c60
1 files changed, 22 insertions, 38 deletions
diff --git a/perlio.c b/perlio.c
index f5eb4851b6..fa9f54feda 100644
--- a/perlio.c
+++ b/perlio.c
@@ -245,7 +245,7 @@ PerlIO_fdupopen(pTHX_ PerlIO *f, CLONE_PARAMS *param, int flags)
return win32_fdupopen(f);
# else
if (f) {
- const int fd = PerlLIO_dup_cloexec(PerlIO_fileno(f));
+ const int fd = PerlLIO_dup(PerlIO_fileno(f));
if (fd >= 0) {
char mode[8];
# ifdef DJGPP
@@ -289,7 +289,7 @@ PerlIO_openn(pTHX_ const char *layers, const char *mode, int fd,
return NULL;
if (*mode == IoTYPE_NUMERIC) {
- fd = PerlLIO_open3_cloexec(name, imode, perm);
+ fd = PerlLIO_open3(name, imode, perm);
if (fd >= 0)
return PerlIO_fdopen(fd, mode + 1);
}
@@ -2642,7 +2642,6 @@ PerlIOUnix_open(pTHX_ PerlIO_funcs *self, PerlIO_list_t *layers,
IV n, const char *mode, int fd, int imode,
int perm, PerlIO *f, int narg, SV **args)
{
- bool known_cloexec = 0;
if (PerlIOValid(f)) {
if (PerlIOBase(f)->tab && PerlIOBase(f)->flags & PERLIO_F_OPEN)
(*PerlIOBase(f)->tab->Close)(aTHX_ f);
@@ -2663,15 +2662,10 @@ PerlIOUnix_open(pTHX_ PerlIO_funcs *self, PerlIO_list_t *layers,
const char *path = SvPV_const(*args, len);
if (!IS_SAFE_PATHNAME(path, len, "open"))
return NULL;
- fd = PerlLIO_open3_cloexec(path, imode, perm);
- known_cloexec = 1;
+ fd = PerlLIO_open3(path, imode, perm);
}
}
if (fd >= 0) {
- if (known_cloexec)
- setfd_inhexec_for_sysfd(fd);
- else
- setfd_cloexec_or_inhexec_by_sysfdness(fd);
if (*mode == IoTYPE_IMPLICIT)
mode++;
if (!f) {
@@ -2706,9 +2700,7 @@ PerlIOUnix_dup(pTHX_ PerlIO *f, PerlIO *o, CLONE_PARAMS *param, int flags)
const PerlIOUnix * const os = PerlIOSelf(o, PerlIOUnix);
int fd = os->fd;
if (flags & PERLIO_DUP_FD) {
- fd = PerlLIO_dup_cloexec(fd);
- if (fd >= 0)
- setfd_inhexec_for_sysfd(fd);
+ fd = PerlLIO_dup(fd);
}
if (fd >= 0) {
f = PerlIOBase_dup(aTHX_ f, o, param, flags);
@@ -2972,7 +2964,7 @@ PerlIO_importFILE(FILE *stdio, const char *mode)
Note that the errno value set by a failing fdopen
varies between stdio implementations.
*/
- const int fd = PerlLIO_dup_cloexec(fd0);
+ const int fd = PerlLIO_dup(fd0);
FILE *f2;
if (fd < 0) {
return f;
@@ -2994,12 +2986,11 @@ PerlIO_importFILE(FILE *stdio, const char *mode)
if ((f = PerlIO_push(aTHX_(PerlIO_allocate(aTHX)), PERLIO_FUNCS_CAST(&PerlIO_stdio), mode, NULL))) {
s = PerlIOSelf(f, PerlIOStdio);
s->stdio = stdio;
- fd0 = fileno(stdio);
- if(fd0 != -1){
- PerlIOUnix_refcnt_inc(fd0);
- setfd_cloexec_or_inhexec_by_sysfdness(fd0);
- }
#ifdef EBCDIC
+ fd0 = fileno(stdio);
+ if(fd0 != -1){
+ PerlIOUnix_refcnt_inc(fd0);
+ }
else{
rc = fldata(stdio,filename,&fileinfo);
if(rc != 0){
@@ -3010,6 +3001,8 @@ PerlIO_importFILE(FILE *stdio, const char *mode)
}
/*This MVS dataset , OK!*/
}
+#else
+ PerlIOUnix_refcnt_inc(fileno(stdio));
#endif
}
}
@@ -3035,9 +3028,7 @@ PerlIOStdio_open(pTHX_ PerlIO_funcs *self, PerlIO_list_t *layers,
if (!s->stdio)
return NULL;
s->stdio = stdio;
- fd = fileno(stdio);
- PerlIOUnix_refcnt_inc(fd);
- setfd_cloexec_or_inhexec_by_sysfdness(fd);
+ PerlIOUnix_refcnt_inc(fileno(s->stdio));
return f;
}
else {
@@ -3048,7 +3039,7 @@ PerlIOStdio_open(pTHX_ PerlIO_funcs *self, PerlIO_list_t *layers,
return NULL;
if (*mode == IoTYPE_NUMERIC) {
mode++;
- fd = PerlLIO_open3_cloexec(path, imode, perm);
+ fd = PerlLIO_open3(path, imode, perm);
}
else {
FILE *stdio;
@@ -3068,9 +3059,7 @@ PerlIOStdio_open(pTHX_ PerlIO_funcs *self, PerlIO_list_t *layers,
f = PerlIO_push(aTHX_ f, self, mode, PerlIOArg);
if (f) {
PerlIOSelf(f, PerlIOStdio)->stdio = stdio;
- fd = fileno(stdio);
- PerlIOUnix_refcnt_inc(fd);
- setfd_cloexec_or_inhexec_by_sysfdness(fd);
+ PerlIOUnix_refcnt_inc(fileno(stdio));
} else {
PerlSIO_fclose(stdio);
}
@@ -3111,9 +3100,7 @@ PerlIOStdio_open(pTHX_ PerlIO_funcs *self, PerlIO_list_t *layers,
}
if ((f = PerlIO_push(aTHX_ f, self, mode, PerlIOArg))) {
PerlIOSelf(f, PerlIOStdio)->stdio = stdio;
- fd = fileno(stdio);
- PerlIOUnix_refcnt_inc(fd);
- setfd_cloexec_or_inhexec_by_sysfdness(fd);
+ PerlIOUnix_refcnt_inc(fileno(stdio));
}
return f;
}
@@ -3134,7 +3121,7 @@ PerlIOStdio_dup(pTHX_ PerlIO *f, PerlIO *o, CLONE_PARAMS *param, int flags)
const int fd = fileno(stdio);
char mode[8];
if (flags & PERLIO_DUP_FD) {
- const int dfd = PerlLIO_dup_cloexec(fileno(stdio));
+ const int dfd = PerlLIO_dup(fileno(stdio));
if (dfd >= 0) {
stdio = PerlSIO_fdopen(dfd, PerlIO_modestr(o,mode));
goto set_this;
@@ -3150,9 +3137,7 @@ PerlIOStdio_dup(pTHX_ PerlIO *f, PerlIO *o, CLONE_PARAMS *param, int flags)
set_this:
PerlIOSelf(f, PerlIOStdio)->stdio = stdio;
if(stdio) {
- int fd = fileno(stdio);
- PerlIOUnix_refcnt_inc(fd);
- setfd_cloexec_or_inhexec_by_sysfdness(fd);
+ PerlIOUnix_refcnt_inc(fileno(stdio));
}
}
return f;
@@ -3309,7 +3294,7 @@ PerlIOStdio_close(pTHX_ PerlIO *f)
SAVE_ERRNO;
invalidate = PerlIOStdio_invalidate_fileno(aTHX_ stdio);
if (!invalidate) {
- dupfd = PerlLIO_dup_cloexec(fd);
+ dupfd = PerlLIO_dup(fd);
#ifdef USE_ITHREADS
if (dupfd < 0) {
/* Oh cXap. This isn't going to go well. Not sure if we can
@@ -3334,8 +3319,7 @@ PerlIOStdio_close(pTHX_ PerlIO *f)
result = close(fd);
#endif
if (dupfd >= 0) {
- PerlLIO_dup2_cloexec(dupfd, fd);
- setfd_inhexec_for_sysfd(fd);
+ PerlLIO_dup2(dupfd,fd);
PerlLIO_close(dupfd);
}
MUTEX_UNLOCK(&PL_perlio_mutex);
@@ -5055,19 +5039,19 @@ PerlIO_tmpfile(void)
/* if TMPDIR is set and not empty, we try that first */
sv = newSVpv(tmpdir, 0);
sv_catpv(sv, tempname + 4);
- fd = Perl_my_mkstemp_cloexec(SvPVX(sv));
+ fd = Perl_my_mkstemp(SvPVX(sv));
}
if (fd < 0) {
SvREFCNT_dec(sv);
sv = NULL;
/* else we try /tmp */
- fd = Perl_my_mkstemp_cloexec(tempname);
+ fd = Perl_my_mkstemp(tempname);
}
if (fd < 0) {
/* Try cwd */
sv = newSVpvs(".");
sv_catpv(sv, tempname + 4);
- fd = Perl_my_mkstemp_cloexec(SvPVX(sv));
+ fd = Perl_my_mkstemp(SvPVX(sv));
}
umask(old_umask);
if (fd >= 0) {