summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--Makefile1
-rw-r--r--libgcompat/sysctl.c28
2 files changed, 29 insertions, 0 deletions
diff --git a/Makefile b/Makefile
index b6e497a..e71ad20 100644
--- a/Makefile
+++ b/Makefile
@@ -11,6 +11,7 @@ LIBGCOMPAT_SRC = \
libgcompat/stdio.c \
libgcompat/stdlib.c \
libgcompat/string.c \
+ libgcompat/sysctl.c \
libgcompat/version.c
LIBGCOMPAT_OBJ = ${LIBGCOMPAT_SRC:.c=.o}
LIBGCOMPAT_SOVERSION = 0
diff --git a/libgcompat/sysctl.c b/libgcompat/sysctl.c
new file mode 100644
index 0000000..5671055
--- /dev/null
+++ b/libgcompat/sysctl.c
@@ -0,0 +1,28 @@
+#include <errno.h>
+#include <string.h>
+#include <unistd.h>
+#include <sys/syscall.h>
+
+
+struct __sysctl_args {
+ int *name;
+ int nlen;
+ void *oldval;
+ size_t *oldlenp;
+ void *newval;
+ size_t newlen;
+};
+
+
+int sysctl (int *name, int nlen, void *oldval, size_t *oldlenp, void *newval, size_t newlen) {
+ struct __sysctl_args args = {
+ .name = name,
+ .nlen = nlen,
+ .oldval = oldval,
+ .oldlenp = oldlenp,
+ .newval = newval,
+ .newlen = newlen
+ };
+
+ return syscall(SYS__sysctl, &args);
+}