]> git.ipfire.org Git - thirdparty/Python/cpython.git/commitdiff
gh-124621: Emscripten: Fix __syscall_ioctl patch (GH-136993)
authorHood Chatham <roberthoodchatham@gmail.com>
Tue, 22 Jul 2025 13:05:26 +0000 (15:05 +0200)
committerGitHub <noreply@github.com>
Tue, 22 Jul 2025 13:05:26 +0000 (15:05 +0200)
If there is an error, we have to return `-errno` not positive errno.
Included in backport of GH-136931: #136988

Python/emscripten_syscalls.c

index 404d98d492a655bec0c55869b864ddefd7c1e9c4..98ee44276e53e03503adea3cc2d1be63cbd2b6ed 100644 (file)
@@ -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;
     }