mirror of
https://github.com/python/cpython.git
synced 2025-07-23 19:25:40 +00:00

Provide a stub implementation of umask that is enough to get some tests passing. More work is needed upstream in Emscripten to make all umask tests to pass.
39 lines
1.2 KiB
C
39 lines
1.2 KiB
C
#include "emscripten.h"
|
|
|
|
// 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.
|
|
// Normally __syscall_getuid32 is a stub that always returns 0 but it is
|
|
// defined with weak linkage so we can override it.
|
|
EM_JS(int, __syscall_getuid32_js, (void), {
|
|
// If we're in node and we can, report the native uid
|
|
if (ENVIRONMENT_IS_NODE) {
|
|
return process.getuid();
|
|
}
|
|
// Fall back to the stub case of returning 0.
|
|
return 0;
|
|
})
|
|
|
|
int __syscall_getuid32(void) {
|
|
return __syscall_getuid32_js();
|
|
}
|
|
|
|
EM_JS(int, __syscall_umask_js, (int mask), {
|
|
// If we're in node and we can, call native process.umask()
|
|
if (ENVIRONMENT_IS_NODE) {
|
|
try {
|
|
return process.umask(mask);
|
|
} catch(e) {
|
|
// oops...
|
|
// NodeJS docs: "In Worker threads, process.umask(mask) will throw an exception."
|
|
// umask docs: "This system call always succeeds"
|
|
return 0;
|
|
}
|
|
}
|
|
// Fall back to the stub case of returning 0.
|
|
return 0;
|
|
})
|
|
|
|
int __syscall_umask(int mask) {
|
|
return __syscall_umask_js(mask);
|
|
}
|