Issue #13757: Change os.fdlistdir() so that it duplicates the passed file
descriptor (instead of closing it).
diff --git a/Modules/posixmodule.c b/Modules/posixmodule.c
index 3c723cf..a71d2e6 100644
--- a/Modules/posixmodule.c
+++ b/Modules/posixmodule.c
@@ -2869,8 +2869,7 @@
 #ifdef HAVE_FDOPENDIR
 PyDoc_STRVAR(posix_fdlistdir__doc__,
 "fdlistdir(fd) -> list_of_strings\n\n\
-Like listdir(), but uses a file descriptor instead.\n\
-After succesful execution of this function, fd will be closed.");
+Like listdir(), but uses a file descriptor instead.");
 
 static PyObject *
 posix_fdlistdir(PyObject *self, PyObject *args)
@@ -2883,6 +2882,10 @@
     errno = 0;
     if (!PyArg_ParseTuple(args, "i:fdlistdir", &fd))
         return NULL;
+    /* closedir() closes the FD, so we duplicate it */
+    fd = dup(fd);
+    if (fd < 0)
+        return posix_error();
     Py_BEGIN_ALLOW_THREADS
     dirp = fdopendir(fd);
     Py_END_ALLOW_THREADS