diff options
author | Christian Heimes <christian@python.org> | 2022-07-26 09:16:51 (GMT) |
---|---|---|
committer | GitHub <noreply@github.com> | 2022-07-26 09:16:51 (GMT) |
commit | 0d35a59ce3242b7326890a8c8cc41b321192ec9a (patch) | |
tree | 0d165365dff1a2131594c209d16719aca25813eb /Python | |
parent | e8f3e8f0ab8aa5d667229ce9694e6e1477e524fd (diff) | |
download | cpython-0d35a59ce3242b7326890a8c8cc41b321192ec9a.zip cpython-0d35a59ce3242b7326890a8c8cc41b321192ec9a.tar.gz cpython-0d35a59ce3242b7326890a8c8cc41b321192ec9a.tar.bz2 |
gh-95174: Handle missing dup() and constants in WASI (GH-95229)
- check for ``dup()`` libc function
- handle missing ``F_DUPFD`` in ``dup2()`` replacement function
- add workaround for WASI libc bug in MSG_TRUNC
- ESHUTDOWN is missing, use EPIPE instead
- POLLPRI is missing, define as 0 (no-op)
Diffstat (limited to 'Python')
-rw-r--r-- | Python/dup2.c | 6 | ||||
-rw-r--r-- | Python/fileutils.c | 6 |
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 7e5d01f..fb1e5ef 100644 --- a/Python/fileutils.c +++ b/Python/fileutils.c @@ -2366,7 +2366,7 @@ _Py_dup(int fd) return -1; } -#else +#elif HAVE_DUP Py_BEGIN_ALLOW_THREADS _Py_BEGIN_SUPPRESS_IPH fd = dup(fd); @@ -2383,6 +2383,10 @@ _Py_dup(int fd) _Py_END_SUPPRESS_IPH return -1; } +#else + errno = ENOTSUP; + PyErr_SetFromErrno(PyExc_OSError); + return -1; #endif return fd; } |