summaryrefslogtreecommitdiff
path: root/src/libc
diff options
context:
space:
mode:
authordzwdz2023-08-31 01:06:41 +0200
committerdzwdz2023-08-31 01:06:41 +0200
commit6cbe58797781cb8514a62bb3ab0e3e8a5d58bce2 (patch)
treebc405a3bc28dce58f1a7141640a5e0605363224c /src/libc
parentcf7877737ff5032f8bad59d57b048f66c4813b5b (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.c11
-rw-r--r--src/libc/include/camellia.h2
-rw-r--r--src/libc/syscall.c4
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);
}