https://github.com/python/cpython/commit/12d2f373b9f70ce43a985ada2832ca31ca66fc20
commit: 12d2f373b9f70ce43a985ada2832ca31ca66fc20
branch: main
author: Hood Chatham <[email protected]>
committer: ambv <[email protected]>
date: 2025-07-22T15:05:26+02:00
summary:

gh-124621: Emscripten: Fix __syscall_ioctl patch (GH-136993)

If there is an error, we have to return `-errno` not positive errno.
Included in backport of GH-136931: #136988

files:
M Python/emscripten_syscalls.c

diff --git a/Python/emscripten_syscalls.c b/Python/emscripten_syscalls.c
index 404d98d492a655..98ee44276e53e0 100644
--- a/Python/emscripten_syscalls.c
+++ b/Python/emscripten_syscalls.c
@@ -1,6 +1,10 @@
 #include "emscripten.h"
 #include "stdio.h"
 
+// All system calls: return nonnegative number on success, return -errno on
+// failure. Negative results get stored back into errno here:
+// 
https://github.com/emscripten-core/emscripten/blob/main/system/lib/libc/musl/src/internal/syscall_ret.c#L7
+
 // If we're running in node, report the UID of the user in the native system as
 // the UID of the user. Since the nodefs will report the uid correctly, if we
 // don't make getuid report it correctly too we'll see some permission errors.
@@ -302,7 +306,7 @@ int __syscall_ioctl(int fd, int request, void* varargs) {
         int flags = fcntl(fd, F_GETFL, 0);
         int nonblock = **((int**)varargs);
         if (flags < 0) {
-            return errno;
+            return -errno;
         }
         if (nonblock) {
             flags |= O_NONBLOCK;
@@ -311,7 +315,7 @@ int __syscall_ioctl(int fd, int request, void* varargs) {
         }
         int res = fcntl(fd, F_SETFL, flags);
         if (res < 0) {
-            return errno;
+            return -errno;
         }
         return res;
     }

_______________________________________________
Python-checkins mailing list -- [email protected]
To unsubscribe send an email to [email protected]
https://mail.python.org/mailman3//lists/python-checkins.python.org
Member address: [email protected]

Reply via email to