summaryrefslogtreecommitdiffstats
path: root/Python
diff options
context:
space:
mode:
authorChristian Heimes <christian@python.org>2022-07-31 15:39:41 (GMT)
committerGitHub <noreply@github.com>2022-07-31 15:39:41 (GMT)
commitdb13c0c1b8bc8c15d920a94ca008aabea4037697 (patch)
tree88b24924603fcffab9c1be7005c4622ba67e7a14 /Python
parentc7ac8b65884a79e6a976811bca10527613b1396a (diff)
downloadcpython-db13c0c1b8bc8c15d920a94ca008aabea4037697.zip
cpython-db13c0c1b8bc8c15d920a94ca008aabea4037697.tar.gz
cpython-db13c0c1b8bc8c15d920a94ca008aabea4037697.tar.bz2
[3.11] gh-95174: Handle missing dup() and constants in WASI (GH-95229) (GH-95272)
Co-authored-by: Christian Heimes <christian@python.org>
Diffstat (limited to 'Python')
-rw-r--r--Python/dup2.c6
-rw-r--r--Python/fileutils.c6
2 files changed, 11 insertions, 1 deletions
diff --git a/Python/dup2.c b/Python/dup2.c
index 7c6bbfc..a1df049 100644
--- a/Python/dup2.c
+++ b/Python/dup2.c
@@ -11,6 +11,7 @@
* Return fd2 if all went well; return BADEXIT otherwise.
*/
+#include <errno.h>
#include <fcntl.h>
#include <unistd.h>
@@ -20,12 +21,17 @@ int
dup2(int fd1, int fd2)
{
if (fd1 != fd2) {
+#ifdef F_DUPFD
if (fcntl(fd1, F_GETFL) < 0)
return BADEXIT;
if (fcntl(fd2, F_GETFL) >= 0)
close(fd2);
if (fcntl(fd1, F_DUPFD, fd2) < 0)
return BADEXIT;
+#else
+ errno = ENOTSUP;
+ return BADEXIT;
+#endif
}
return fd2;
}
diff --git a/Python/fileutils.c b/Python/fileutils.c
index 4f7f894..2792426 100644
--- a/Python/fileutils.c
+++ b/Python/fileutils.c
@@ -2379,7 +2379,7 @@ _Py_dup(int fd)
return -1;
}
-#else
+#elif HAVE_DUP
Py_BEGIN_ALLOW_THREADS
_Py_BEGIN_SUPPRESS_IPH
fd = dup(fd);
@@ -2396,6 +2396,10 @@ _Py_dup(int fd)
_Py_END_SUPPRESS_IPH
return -1;
}
+#else
+ errno = ENOTSUP;
+ PyErr_SetFromErrno(PyExc_OSError);
+ return -1;
#endif
return fd;
}