aboutsummaryrefslogtreecommitdiff
path: root/sys/linux
diff options
context:
space:
mode:
authorNicholas Noll <nbnoll@eml.cc>2021-12-05 15:17:44 -0800
committerNicholas Noll <nbnoll@eml.cc>2021-12-05 15:17:44 -0800
commitb48327d357e0818d1a6ae2a064cfa7d1567e1242 (patch)
tree4677f228a9846937a7ec71c72a1ab63ab69d68ab /sys/linux
parentc200dd832789afa298ba45e0b9efdec96c0e92cc (diff)
feat(huge): huge refactor (in progress).
Commented out libc includes to uncover all explicit dependencies. A large fraction has now been ported over (no testing). I did not port over the command line tools, such as the rc shell. These will be done independently - as of now I just want the library to stand independent. Compilation currently fails due to the lack of math functions.
Diffstat (limited to 'sys/linux')
-rw-r--r--sys/linux/amd64/arch/constants.h2
-rw-r--r--sys/linux/port/os/constants.h7
-rw-r--r--sys/linux/src/access.c7
-rw-r--r--sys/linux/src/accessat.c8
-rw-r--r--sys/linux/src/cwd.c8
-rw-r--r--sys/linux/src/openat.c8
-rw-r--r--sys/linux/src/read.c2
-rw-r--r--sys/linux/src/write.c2
8 files changed, 40 insertions, 4 deletions
diff --git a/sys/linux/amd64/arch/constants.h b/sys/linux/amd64/arch/constants.h
index 1949bdf..f1c1b4c 100644
--- a/sys/linux/amd64/arch/constants.h
+++ b/sys/linux/amd64/arch/constants.h
@@ -19,5 +19,3 @@
#define sys·ONoATime 01000000
#define sys·OPath 010000000
#define sys·OTempFile 020200000
-
-#define SYS·HAVE_FCNTL
diff --git a/sys/linux/port/os/constants.h b/sys/linux/port/os/constants.h
index f994a93..03bab2a 100644
--- a/sys/linux/port/os/constants.h
+++ b/sys/linux/port/os/constants.h
@@ -1,5 +1,12 @@
#pragma once
+/* file access */
+#define sys·FileExists 0
+#define sys·FileCanExec 1
+#define sys·FileCanWrite 2
+#define sys·FileCanRead 4
+
+
/* device modes */
#define sys·ModeFile 0170000
#define sys·ModeDir 0040000
diff --git a/sys/linux/src/access.c b/sys/linux/src/access.c
new file mode 100644
index 0000000..fc83b55
--- /dev/null
+++ b/sys/linux/src/access.c
@@ -0,0 +1,7 @@
+#include "internal.h"
+
+int
+sys·access(char *path, int mode)
+{
+ return sys·accessat(sys·FdCwd, path, mode, 0);
+}
diff --git a/sys/linux/src/accessat.c b/sys/linux/src/accessat.c
new file mode 100644
index 0000000..ba1362f
--- /dev/null
+++ b/sys/linux/src/accessat.c
@@ -0,0 +1,8 @@
+#include "internal.h"
+
+int
+sys·accessat(int dirfd, char *path, int mode, int flags)
+{
+ long ret = syscall(·FAccessAt2, path, mode, flags);
+ return error(ret);
+}
diff --git a/sys/linux/src/cwd.c b/sys/linux/src/cwd.c
new file mode 100644
index 0000000..0d8f3c3
--- /dev/null
+++ b/sys/linux/src/cwd.c
@@ -0,0 +1,8 @@
+#include "internal.h"
+
+int
+sys·cwd(char *buf, uintptr size)
+{
+ long ret = syscall(·GetCwd, buf, size);
+ return error(ret);
+}
diff --git a/sys/linux/src/openat.c b/sys/linux/src/openat.c
new file mode 100644
index 0000000..7db7844
--- /dev/null
+++ b/sys/linux/src/openat.c
@@ -0,0 +1,8 @@
+#include "internal.h"
+
+int
+sys·openat(int dirfd, char *path, int flags, int mode, int *fd)
+{
+ long ret = *fd = syscall(·OpenAt, dirfd, path, flags, mode);
+ return error(ret);
+}
diff --git a/sys/linux/src/read.c b/sys/linux/src/read.c
index db9cabf..1ca1a85 100644
--- a/sys/linux/src/read.c
+++ b/sys/linux/src/read.c
@@ -1,7 +1,7 @@
#include "internal.h"
int
-sys·read(int fd, uintptr len, void *buf, intptr *n)
+sys·read(int fd, void *buf, uintptr len, intptr *n)
{
intptr ret = *n = syscall(·Read, fd, buf, len);
return error(ret);
diff --git a/sys/linux/src/write.c b/sys/linux/src/write.c
index 4e09d82..9586b93 100644
--- a/sys/linux/src/write.c
+++ b/sys/linux/src/write.c
@@ -1,7 +1,7 @@
#include "internal.h"
int
-sys·write(int fd, uintptr len, void *buf, intptr *ret)
+sys·write(int fd, void *buf, uintptr len, intptr *ret)
{
long err = *ret = syscall(·Write, fd, buf, len);
return error(err);