diff options
author | Nicholas Noll <nbnoll@eml.cc> | 2021-11-18 13:18:38 -0800 |
---|---|---|
committer | Nicholas Noll <nbnoll@eml.cc> | 2021-11-18 13:18:38 -0800 |
commit | 4bf477d5ed372fd44697d2f0df245b61b4f3f7b3 (patch) | |
tree | e52d8aa00de40b33c4f26cacba6841f299f97bb2 /sys/src | |
parent | 8306b655f9d9a291126ed4947c481ea540c9b835 (diff) |
filling out system layer
Diffstat (limited to 'sys/src')
-rw-r--r-- | sys/src/brk.c | 8 | ||||
-rw-r--r-- | sys/src/dirents.c | 8 | ||||
-rw-r--r-- | sys/src/madvise.c | 8 | ||||
-rw-r--r-- | sys/src/mlock.c | 8 | ||||
-rw-r--r-- | sys/src/mmap.c | 16 | ||||
-rw-r--r-- | sys/src/mprotect.c | 14 | ||||
-rw-r--r-- | sys/src/mremap.c | 20 | ||||
-rw-r--r-- | sys/src/munlock.c | 8 | ||||
-rw-r--r-- | sys/src/munmap.c | 8 | ||||
-rw-r--r-- | sys/src/read.c | 2 | ||||
-rw-r--r-- | sys/src/sbrk.c | 6 |
11 files changed, 105 insertions, 1 deletions
diff --git a/sys/src/brk.c b/sys/src/brk.c new file mode 100644 index 0000000..85dd30c --- /dev/null +++ b/sys/src/brk.c @@ -0,0 +1,8 @@ +#include "internal.h" + +int +sys·brk(void *addr) +{ + long ret = syscall(·Brk, addr); + return error(ret); +} diff --git a/sys/src/dirents.c b/sys/src/dirents.c new file mode 100644 index 0000000..c00ce15 --- /dev/null +++ b/sys/src/dirents.c @@ -0,0 +1,8 @@ +#include "internal.h" + +int +sys·dirents(int fd, int len, void *buffer, int *size) +{ + long ret = *size = syscall(·GetDents, fd, buffer, len); + return error(ret); +} diff --git a/sys/src/madvise.c b/sys/src/madvise.c new file mode 100644 index 0000000..49e512e --- /dev/null +++ b/sys/src/madvise.c @@ -0,0 +1,8 @@ +#include "internal.h" + +int +sys·madvise(void *addr, uintptr len, int advice) +{ + long ret = syscall(·MAdvise, addr, len, advice); + return error(ret); +} diff --git a/sys/src/mlock.c b/sys/src/mlock.c new file mode 100644 index 0000000..0de348f --- /dev/null +++ b/sys/src/mlock.c @@ -0,0 +1,8 @@ +#include "internal.h" + +int +sys·mlock(void *addr, uintptr len) +{ + long ret = syscall(·MLock, addr, len); + return error(ret); +} diff --git a/sys/src/mmap.c b/sys/src/mmap.c index fb5c5f4..21d927b 100644 --- a/sys/src/mmap.c +++ b/sys/src/mmap.c @@ -1 +1,17 @@ #include "internal.h" + +int +sys·mmap(void *start, uintptr len, int protect, int flags, int fd, intptr off, void **buf) +{ + long ret; + if(len >= PTRDIFF_MAX) + return sys·ErrorNoMemory; + + ret = syscall(·MMap, start, len, protect, flags, fd, off); + if(ret < 0){ + *buf = nil; + return -ret; + } + *buf = (void*)ret; + return 0; +} diff --git a/sys/src/mprotect.c b/sys/src/mprotect.c new file mode 100644 index 0000000..6d20dc1 --- /dev/null +++ b/sys/src/mprotect.c @@ -0,0 +1,14 @@ +#include "internal.h" + +int +sys·mprotect(void *addr, uintptr len, int prot) +{ + long ret; + uintptr beg, end; + + beg = (uintptr)addr & -PAGESIZE; + end = (uintptr)(addr + len + PAGESIZE-1) & -PAGESIZE; + + ret = syscall(·MProtect, beg, end-beg, prot); + return error(ret); +} diff --git a/sys/src/mremap.c b/sys/src/mremap.c new file mode 100644 index 0000000..dda05ce --- /dev/null +++ b/sys/src/mremap.c @@ -0,0 +1,20 @@ +#include "internal.h" + +int +sys·mremap(void *addr, uintptr from, uintptr to, int flags, void **ret) +{ + long r; + void *new; + + if(to >= PTRDIFF_MAX) + return sys·ErrorNoMemory; + + new = (flags & sys·RemapFixed) ? *ret : nil; + r = syscall(·MRemap, addr, from, to, flags, new); + if(r > 0){ + *ret = (void*)r; + return 0; + } + + return error(r); +} diff --git a/sys/src/munlock.c b/sys/src/munlock.c new file mode 100644 index 0000000..1986306 --- /dev/null +++ b/sys/src/munlock.c @@ -0,0 +1,8 @@ +#include "internal.h" + +int +sys·munlock(void *addr, uintptr len) +{ + long ret = syscall(·MUnlock, addr, len); + return error(ret); +} diff --git a/sys/src/munmap.c b/sys/src/munmap.c new file mode 100644 index 0000000..2eee00c --- /dev/null +++ b/sys/src/munmap.c @@ -0,0 +1,8 @@ +#include "internal.h" + +int +sys·munmap(void *addr, uintptr len) +{ + long ret = syscall(·MUnmap, addr, len); + return error(ret); +} diff --git a/sys/src/read.c b/sys/src/read.c index 8d308ba..db9cabf 100644 --- a/sys/src/read.c +++ b/sys/src/read.c @@ -1,7 +1,7 @@ #include "internal.h" int -sys·read(int fd, intptr len, void *buf, intptr *n) +sys·read(int fd, uintptr len, void *buf, intptr *n) { intptr ret = *n = syscall(·Read, fd, buf, len); return error(ret); diff --git a/sys/src/sbrk.c b/sys/src/sbrk.c new file mode 100644 index 0000000..31af79b --- /dev/null +++ b/sys/src/sbrk.c @@ -0,0 +1,6 @@ +#include "internal.h" + +int +sys·sbrk(intptr inc, void *ret) +{ +} |