diff options
author | dzwdz | 2023-08-31 01:06:41 +0200 |
---|---|---|
committer | dzwdz | 2023-08-31 01:06:41 +0200 |
commit | 6cbe58797781cb8514a62bb3ab0e3e8a5d58bce2 (patch) | |
tree | bc405a3bc28dce58f1a7141640a5e0605363224c /src/libc | |
parent | cf7877737ff5032f8bad59d57b048f66c4813b5b (diff) |
kernel: add _sys_getprocfs in place of HANDLE_PROCFS
This makes the side-effects more explicit, and feels less hacky than
`HANDLE_PROCFS`. I don't think accessing a handle alone should have
side-effects, even if it's a "special" one.
Diffstat (limited to 'src/libc')
-rw-r--r-- | src/libc/camellia.c | 11 | ||||
-rw-r--r-- | src/libc/include/camellia.h | 2 | ||||
-rw-r--r-- | src/libc/syscall.c | 4 |
3 files changed, 17 insertions, 0 deletions
diff --git a/src/libc/camellia.c b/src/libc/camellia.c index 4e092e4..bc38e77 100644 --- a/src/libc/camellia.c +++ b/src/libc/camellia.c @@ -28,3 +28,14 @@ hid_t camellia_open(const char *path, int flags) { return ret; } + +int camellia_procfs(const char *path) { + hid_t hid = _sys_getprocfs(0); + if (hid < 0) { + errno = -hid; + return -1; + } + _sys_mount(hid, path, strlen(path)); + close(hid); + return 0; +} diff --git a/src/libc/include/camellia.h b/src/libc/include/camellia.h index 2e4998b..49298bd 100644 --- a/src/libc/include/camellia.h +++ b/src/libc/include/camellia.h @@ -3,3 +3,5 @@ #include <camellia/types.h> hid_t camellia_open(const char *path, int flags); + +int camellia_procfs(const char *path); diff --git a/src/libc/syscall.c b/src/libc/syscall.c index b920e14..706aec6 100644 --- a/src/libc/syscall.c +++ b/src/libc/syscall.c @@ -90,6 +90,10 @@ int _sys_wait2(int pid, int flags, struct sys_wait2 __user *out) { return (int)_syscall(_SYS_WAIT2, (long)pid, (long)flags, (long)out, 0, 0); } +hid_t _sys_getprocfs(int flags) { + return (hid_t)_syscall(_SYS_GETPROCFS, (long)flags, 0, 0, 0, 0); +} + long _sys_execbuf(void __user *buf, size_t len) { return _syscall(_SYS_EXECBUF, (long)buf, (long)len, 0, 0, 0); } |