Skip to content

Commit 5cafde0

Browse files
committed
Clone dirhandles without fchdir
1 parent c4c8ed7 commit 5cafde0

File tree

1 file changed

+7
-2
lines changed

1 file changed

+7
-2
lines changed

sv.c

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14096,7 +14096,7 @@ Perl_dirp_dup(pTHX_ DIR *const dp, CLONE_PARAMS *const param)
1409614096
{
1409714097
DIR *ret;
1409814098

14099-
#if defined(HAS_FCHDIR) && defined(HAS_TELLDIR) && defined(HAS_SEEKDIR)
14099+
#if !defined(HAS_FDOPENDIR) && defined(HAS_FCHDIR) && defined(HAS_TELLDIR) && defined(HAS_SEEKDIR)
1410014100
DIR *pwd;
1410114101
const Direntry_t *dirent;
1410214102
char smallbuf[256]; /* XXX MAXPATHLEN, surely? */
@@ -14106,6 +14106,7 @@ Perl_dirp_dup(pTHX_ DIR *const dp, CLONE_PARAMS *const param)
1410614106
#endif
1410714107

1410814108
PERL_UNUSED_CONTEXT;
14109+
PERL_UNUSED_VAR(param);
1410914110
PERL_ARGS_ASSERT_DIRP_DUP;
1411014111

1411114112
if (!dp)
@@ -14116,7 +14117,11 @@ Perl_dirp_dup(pTHX_ DIR *const dp, CLONE_PARAMS *const param)
1411614117
if (ret)
1411714118
return ret;
1411814119

14119-
#if defined(HAS_FCHDIR) && defined(HAS_TELLDIR) && defined(HAS_SEEKDIR)
14120+
#ifdef HAS_FDOPENDIR
14121+
14122+
ret = fdopendir(dup(my_dirfd(dp)));
14123+
14124+
#elif defined(HAS_FCHDIR) && defined(HAS_TELLDIR) && defined(HAS_SEEKDIR)
1412014125

1412114126
PERL_UNUSED_ARG(param);
1412214127

0 commit comments

Comments
 (0)