From 835dea0eb6333a9ef452881ea073bfe59d14096a Mon Sep 17 00:00:00 2001 From: Nicholas Noll Date: Thu, 18 Nov 2021 17:49:04 -0800 Subject: feat: continued filling out system layer --- sys/linux/port/os/constants.h | 2 ++ sys/linux/port/os/types.h | 41 ++++++++++++++++++++++++++++++++++++++++- sys/src/getgid.c | 8 ++++++++ sys/src/getpgid.c | 8 ++++++++ sys/src/getpid.c | 8 ++++++++ sys/src/getuid.c | 8 ++++++++ sys/src/ioctl.c | 17 +++++++++++++++++ sys/src/setpgid.c | 8 ++++++++ sys/src/wait.c | 7 +++++++ sys/src/waitfor.c | 8 ++++++++ 10 files changed, 114 insertions(+), 1 deletion(-) create mode 100644 sys/src/getgid.c create mode 100644 sys/src/getpgid.c create mode 100644 sys/src/getpid.c create mode 100644 sys/src/getuid.c create mode 100644 sys/src/ioctl.c create mode 100644 sys/src/setpgid.c create mode 100644 sys/src/wait.c create mode 100644 sys/src/waitfor.c (limited to 'sys') diff --git a/sys/linux/port/os/constants.h b/sys/linux/port/os/constants.h index 8abf1fa..8fb913f 100644 --- a/sys/linux/port/os/constants.h +++ b/sys/linux/port/os/constants.h @@ -23,6 +23,8 @@ #define sys·ModeLink 0120000 #define sys·ModeSocket 0140000 +/* ioctl values */ + /* mmap */ #define sys·ProtNone 0 #define sys·ProtRead 1 diff --git a/sys/linux/port/os/types.h b/sys/linux/port/os/types.h index 6e5c0c6..e772b35 100644 --- a/sys/linux/port/os/types.h +++ b/sys/linux/port/os/types.h @@ -1,4 +1,5 @@ #pragma once +#define packed __attribute__((packed)) /* * time @@ -6,6 +7,7 @@ /* timeval */ typedef struct sys·TimeStamp sys·TimeStamp; +typedef struct sys·TimeValue sys·TimeValue; struct sys·TimeStamp { @@ -14,6 +16,41 @@ struct sys·TimeStamp int32 femto; }; +struct sys·TimeValue +{ + int64 sec; + int64 micro; +}; + +/* resource */ +typedef struct sys·UsageInfo sys·UsageInfo; + +/* rusage */ +struct sys·UsageInfo +{ + sys·TimeValue cpu; + sys·TimeValue sys; + /* linux extensions */ + long maxrss; /* maximum resident set size */ + long ixrss; /* integral shared memory size */ + long idrss; /* integral unshared data size */ + long isrss; /* integral unshared stack size */ + struct packed { + long minor; /* page reclaims (soft page faults) */ + long major; /* page faults (hard page faults) */ + }fault; + long nswap; /* swaps */ + long iblk; /* block input operations */ + long oblk; /* block output operations */ + long msgsent; /* IPC messages sent */ + long msgrcvd; /* IPC messages received */ + long nsignal; /* signals received */ + long nvctxsw; /* voluntary context switches */ + long nictxsw; /* involuntary context switches */ + /* room for more... */ + long __reserved[16]; +}; + /* * files */ @@ -40,7 +77,7 @@ struct sys·Info sys·TimeStamp access, create, status, modify; - struct{ + struct packed{ uint32 major; uint32 minor; }spdev; @@ -70,3 +107,5 @@ struct sys·DirEntry uchar type; /* filetype */ char name[]; /* filename */ }; + +#undef packed diff --git a/sys/src/getgid.c b/sys/src/getgid.c new file mode 100644 index 0000000..e9c6583 --- /dev/null +++ b/sys/src/getgid.c @@ -0,0 +1,8 @@ +#include "internal.h" + +int +sys·getgid(void) +{ + long ret = syscall(·GetGid); + return error(ret); +} diff --git a/sys/src/getpgid.c b/sys/src/getpgid.c new file mode 100644 index 0000000..7077c8b --- /dev/null +++ b/sys/src/getpgid.c @@ -0,0 +1,8 @@ +#include "internal.h" + +int +sys·getpgid(int pid) +{ + long ret = syscall(·GetPGid, pid); + return error(ret); +} diff --git a/sys/src/getpid.c b/sys/src/getpid.c new file mode 100644 index 0000000..527bdb2 --- /dev/null +++ b/sys/src/getpid.c @@ -0,0 +1,8 @@ +#include "internal.h" + +int +sys·getpid(void) +{ + long ret = syscall(·GetPid); + return error(ret); +} diff --git a/sys/src/getuid.c b/sys/src/getuid.c new file mode 100644 index 0000000..aebf32b --- /dev/null +++ b/sys/src/getuid.c @@ -0,0 +1,8 @@ +#include "internal.h" + +int +sys·getuid(void) +{ + long ret = syscall(·GetUid); + return error(ret); +} diff --git a/sys/src/ioctl.c b/sys/src/ioctl.c new file mode 100644 index 0000000..30c7318 --- /dev/null +++ b/sys/src/ioctl.c @@ -0,0 +1,17 @@ +#include "internal.h" +#include + +int +sys·ioctl(int fd, int request, ...) +{ + long ret; + void *arg; + va_list ap; + + va_start(ap, request); + arg = va_arg(ap, void*); + va_end(ap); + + ret = syscall(·IoCtl, fd, request, arg); + return error(ret); +} diff --git a/sys/src/setpgid.c b/sys/src/setpgid.c new file mode 100644 index 0000000..b77d696 --- /dev/null +++ b/sys/src/setpgid.c @@ -0,0 +1,8 @@ +#include "internal.h" + +int +sys·setpgid(int pid, int pgid) +{ + long ret = syscall(·SetPGid, pid, pgid); + return error(ret); +} diff --git a/sys/src/wait.c b/sys/src/wait.c new file mode 100644 index 0000000..6d97db2 --- /dev/null +++ b/sys/src/wait.c @@ -0,0 +1,7 @@ +#include "internal.h" + +int +sys·wait(int *status) +{ + return sys·waitfor(-1, status, 0, nil); +} diff --git a/sys/src/waitfor.c b/sys/src/waitfor.c new file mode 100644 index 0000000..0228427 --- /dev/null +++ b/sys/src/waitfor.c @@ -0,0 +1,8 @@ +#include "internal.h" + +int +sys·waitfor(int pid, int *status, int option, sys·UsageInfo *resource) +{ + long ret = syscall(·Wait4, pid, status, option, resource); + return error(ret); +} -- cgit v1.2.1