Skip to content

Commit ad5d891

Browse files
committed
Native implementation of posix.getuid()
1 parent 0c05ed7 commit ad5d891

File tree

6 files changed

+32
-11
lines changed

6 files changed

+32
-11
lines changed

graalpython/com.oracle.graal.python.cext/posix/posix.c

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -467,6 +467,10 @@ int32_t call_kill(int64_t pid, int32_t signal) {
467467
return kill(pid, signal);
468468
}
469469

470+
int64_t call_getuid() {
471+
return getuid();
472+
}
473+
470474
int32_t get_errno() {
471475
return errno;
472476
}

graalpython/com.oracle.graal.python/src/com/oracle/graal/python/builtins/modules/PosixModuleBuiltins.java

Lines changed: 2 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -414,17 +414,8 @@ long getPid(@CachedLibrary("getPosixSupport()") PosixSupportLibrary posixLib) {
414414
@GenerateNodeFactory
415415
public abstract static class GetUidNode extends PythonBuiltinNode {
416416
@Specialization
417-
static long getPid() {
418-
return getSystemUid();
419-
}
420-
421-
@TruffleBoundary
422-
static long getSystemUid() {
423-
String osName = System.getProperty("os.name");
424-
if (osName.contains("Linux")) {
425-
return new com.sun.security.auth.module.UnixSystem().getUid();
426-
}
427-
return 1000;
417+
long getUid(@CachedLibrary("getPosixSupport()") PosixSupportLibrary posixLib) {
418+
return posixLib.getuid(getPosixSupport());
428419
}
429420
}
430421

graalpython/com.oracle.graal.python/src/com/oracle/graal/python/runtime/EmulatedPosixSupport.java

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1561,6 +1561,17 @@ public int wstopsig(int status) {
15611561
return 0;
15621562
}
15631563

1564+
@ExportMessage
1565+
@SuppressWarnings("static-method")
1566+
@TruffleBoundary
1567+
public long getuid() {
1568+
String osName = System.getProperty("os.name");
1569+
if (osName.contains("Linux")) {
1570+
return new com.sun.security.auth.module.UnixSystem().getUid();
1571+
}
1572+
return 1000;
1573+
}
1574+
15641575
@ExportMessage
15651576
@TruffleBoundary
15661577
public int forkExec(Object[] executables, Object[] args, Object cwd, Object[] env, int stdinReadFd, int stdinWriteFd, int stdoutReadFd, int stdoutWriteFd, int stderrReadFd, int stderrWriteFd,

graalpython/com.oracle.graal.python/src/com/oracle/graal/python/runtime/LoggingPosixSupport.java

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -661,6 +661,13 @@ final int wstopsig(int status,
661661
return logExit("wstopsig", "%d", lib.wstopsig(delegate, status));
662662
}
663663

664+
@ExportMessage
665+
final long getuid(
666+
@CachedLibrary("this.delegate") PosixSupportLibrary lib) {
667+
logEnter("getuid", "");
668+
return logExit("getuid", "%d", lib.getuid(delegate));
669+
}
670+
664671
@ExportMessage
665672
final int forkExec(Object[] executables, Object[] args, Object cwd, Object[] env, int stdinReadFd, int stdinWriteFd, int stdoutReadFd, int stdoutWriteFd, int stderrReadFd, int stderrWriteFd,
666673
int errPipeReadFd, int errPipeWriteFd, boolean closeFds, boolean restoreSignals, boolean callSetsid, int[] fdsToKeep,

graalpython/com.oracle.graal.python/src/com/oracle/graal/python/runtime/NFIPosixSupport.java

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -148,6 +148,7 @@ private enum PosixNativeFunction {
148148
call_wexitstatus("(sint32):sint32"),
149149
call_wtermsig("(sint32):sint32"),
150150
call_wstopsig("(sint32):sint32"),
151+
call_getuid("():sint64"),
151152
fork_exec("([sint8], [sint64], sint32, sint32, sint32, sint32, sint32, sint32, sint32, sint32, sint32, sint32, sint32, sint32, sint32, sint32, sint32, [sint32], sint64):sint32");
152153

153154
private final String signature;
@@ -890,6 +891,11 @@ public int wstopsig(int status,
890891
return invokeNode.callInt(this, PosixNativeFunction.call_wstopsig, status);
891892
}
892893

894+
@ExportMessage
895+
public long getuid(@Shared("invoke") @Cached InvokeNativeFunction invokeNode) {
896+
return invokeNode.callLong(this, PosixNativeFunction.call_getuid);
897+
}
898+
893899
@ExportMessage
894900
public int forkExec(Object[] executables, Object[] args, Object cwd, Object[] env, int stdinReadFd, int stdinWriteFd, int stdoutReadFd, int stdoutWriteFd, int stderrReadFd, int stderrWriteFd,
895901
int errPipeReadFd, int errPipeWriteFd, boolean closeFds, boolean restoreSignals, boolean callSetsid, int[] fdsToKeep,

graalpython/com.oracle.graal.python/src/com/oracle/graal/python/runtime/PosixSupportLibrary.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -265,6 +265,8 @@ public abstract class PosixSupportLibrary extends Library {
265265

266266
public abstract int wstopsig(Object receiver, int status);
267267

268+
public abstract long getuid(Object receiver);
269+
268270
public abstract int forkExec(Object receiver, Object[] executables, Object[] args, Object cwd, Object[] env, int stdinReadFd, int stdinWriteFd, int stdoutReadFd, int stdoutWriteFd,
269271
int stderrReadFd, int stderrWriteFd, int errPipeReadFd, int errPipeWriteFd, boolean closeFds, boolean restoreSignals, boolean callSetsid, int[] fdsToKeep) throws PosixException;
270272

0 commit comments

Comments
 (0)