summaryrefslogtreecommitdiff
path: root/kernel/syscalls
diff options
context:
space:
mode:
authorAnton Kling <anton@kling.gg>2024-06-26 21:34:40 +0200
committerAnton Kling <anton@kling.gg>2024-06-26 21:34:40 +0200
commite15065fe45f8004adcc8b69bbbe680ced0d530a1 (patch)
tree19dab20babd5169a8266faf133d41a4ebd61f1f6 /kernel/syscalls
parent2e2f89c7508dede2c970e6061c2f66d4536162ca (diff)
Kernel: Move all syscalls into one file
Diffstat (limited to 'kernel/syscalls')
-rw-r--r--kernel/syscalls/accept.c5
-rw-r--r--kernel/syscalls/bind.c5
-rw-r--r--kernel/syscalls/chdir.c6
-rw-r--r--kernel/syscalls/clock_gettime.c10
-rw-r--r--kernel/syscalls/fstat.c11
-rw-r--r--kernel/syscalls/ftruncate.c6
-rw-r--r--kernel/syscalls/getcwd.c10
-rw-r--r--kernel/syscalls/isatty.c14
-rw-r--r--kernel/syscalls/kill.c15
-rw-r--r--kernel/syscalls/lseek.c34
-rw-r--r--kernel/syscalls/mkdir.c5
-rw-r--r--kernel/syscalls/mmap.c7
-rw-r--r--kernel/syscalls/msleep.c9
-rw-r--r--kernel/syscalls/munmap.c6
-rw-r--r--kernel/syscalls/open.c14
-rw-r--r--kernel/syscalls/open_process.c26
-rw-r--r--kernel/syscalls/ppoll.c11
-rw-r--r--kernel/syscalls/pwrite.c6
-rw-r--r--kernel/syscalls/randomfill.c9
-rw-r--r--kernel/syscalls/recvfrom.c60
-rw-r--r--kernel/syscalls/sendto.c23
-rw-r--r--kernel/syscalls/shm.c6
-rw-r--r--kernel/syscalls/sigaction.c9
-rw-r--r--kernel/syscalls/socket.c5
-rw-r--r--kernel/syscalls/uptime.c6
-rw-r--r--kernel/syscalls/write.c13
26 files changed, 0 insertions, 331 deletions
diff --git a/kernel/syscalls/accept.c b/kernel/syscalls/accept.c
deleted file mode 100644
index 0be578c..0000000
--- a/kernel/syscalls/accept.c
+++ /dev/null
@@ -1,5 +0,0 @@
-#include <syscalls.h>
-
-int syscall_accept(SYS_ACCEPT_PARAMS *args) {
- return accept(args->socket, args->address, args->address_len);
-}
diff --git a/kernel/syscalls/bind.c b/kernel/syscalls/bind.c
deleted file mode 100644
index 53eeb79..0000000
--- a/kernel/syscalls/bind.c
+++ /dev/null
@@ -1,5 +0,0 @@
-#include <syscalls.h>
-
-int syscall_bind(SYS_BIND_PARAMS *args) {
- return bind(args->sockfd, args->addr, args->addrlen);
-}
diff --git a/kernel/syscalls/chdir.c b/kernel/syscalls/chdir.c
deleted file mode 100644
index 4b1f714..0000000
--- a/kernel/syscalls/chdir.c
+++ /dev/null
@@ -1,6 +0,0 @@
-#include <fs/vfs.h>
-#include <syscalls.h>
-
-int syscall_chdir(const char *path) {
- return vfs_chdir(path);
-}
diff --git a/kernel/syscalls/clock_gettime.c b/kernel/syscalls/clock_gettime.c
deleted file mode 100644
index c0696d7..0000000
--- a/kernel/syscalls/clock_gettime.c
+++ /dev/null
@@ -1,10 +0,0 @@
-#include <syscalls.h>
-
-int syscall_clock_gettime(SYS_CLOCK_GETTIME_PARAMS *args) {
- // FIXME: Actually implement this
- if (args->ts) {
- args->ts->tv_sec = 0;
- args->ts->tv_nsec = 0;
- }
- return 0;
-}
diff --git a/kernel/syscalls/fstat.c b/kernel/syscalls/fstat.c
deleted file mode 100644
index 38346e3..0000000
--- a/kernel/syscalls/fstat.c
+++ /dev/null
@@ -1,11 +0,0 @@
-#include <errno.h>
-#include <fs/vfs.h>
-#include <syscalls.h>
-
-int syscall_fstat(int fd, struct stat *buf) {
- if (!mmu_is_valid_userpointer(buf, sizeof(struct stat))) {
- return -EPERM; // TODO: Is this correct? The spec says nothing about
- // this case.
- }
- return vfs_fstat(fd, buf);
-}
diff --git a/kernel/syscalls/ftruncate.c b/kernel/syscalls/ftruncate.c
deleted file mode 100644
index 2ed5ccc..0000000
--- a/kernel/syscalls/ftruncate.c
+++ /dev/null
@@ -1,6 +0,0 @@
-#include <fs/vfs.h>
-#include <syscalls.h>
-
-int syscall_ftruncate(int fd, size_t length) {
- return vfs_ftruncate(fd, length);
-}
diff --git a/kernel/syscalls/getcwd.c b/kernel/syscalls/getcwd.c
deleted file mode 100644
index bd0025d..0000000
--- a/kernel/syscalls/getcwd.c
+++ /dev/null
@@ -1,10 +0,0 @@
-#include <math.h>
-#include <sched/scheduler.h>
-#include <syscalls.h>
-
-char *syscall_getcwd(char *buf, size_t size) {
- const char *cwd = current_task->current_working_directory;
- size_t len = min(size, strlen(cwd));
- strlcpy(buf, current_task->current_working_directory, len);
- return buf;
-}
diff --git a/kernel/syscalls/isatty.c b/kernel/syscalls/isatty.c
deleted file mode 100644
index de3e918..0000000
--- a/kernel/syscalls/isatty.c
+++ /dev/null
@@ -1,14 +0,0 @@
-#include <errno.h>
-#include <fs/vfs.h>
-#include <syscalls.h>
-
-int syscall_isatty(int fd) {
- vfs_fd_t *fd_ptr = get_vfs_fd(fd, NULL);
- if (!fd_ptr) {
- return -EBADF;
- }
- if (!fd_ptr->is_tty) {
- return -ENOTTY;
- }
- return 1;
-}
diff --git a/kernel/syscalls/kill.c b/kernel/syscalls/kill.c
deleted file mode 100644
index affade6..0000000
--- a/kernel/syscalls/kill.c
+++ /dev/null
@@ -1,15 +0,0 @@
-#include <errno.h>
-#include <sched/scheduler.h>
-#include <signal.h>
-#include <syscalls.h>
-
-int syscall_kill(int fd, int sig) {
- vfs_fd_t *fd_ptr = get_vfs_fd(fd, NULL);
- if (!fd_ptr) {
- return -EBADF;
- }
- if (!fd_ptr->inode->send_signal) {
- return -EBADF;
- }
- return process_signal(fd_ptr, sig);
-}
diff --git a/kernel/syscalls/lseek.c b/kernel/syscalls/lseek.c
deleted file mode 100644
index e85d4c1..0000000
--- a/kernel/syscalls/lseek.c
+++ /dev/null
@@ -1,34 +0,0 @@
-#include <assert.h>
-#include <errno.h>
-#include <fs/vfs.h>
-
-// FIXME: These should be in a shared header file with libc
-#define SEEK_SET 0
-#define SEEK_CUR 1
-#define SEEK_END 2
-
-int syscall_lseek(int fd, int offset, int whence) {
- vfs_fd_t *fd_ptr = get_vfs_fd(fd, NULL);
- if (!fd_ptr) {
- return -EBADF;
- }
-
- off_t ret_offset = fd_ptr->offset;
- switch (whence) {
- case SEEK_SET:
- ret_offset = offset;
- break;
- case SEEK_CUR:
- ret_offset += offset;
- break;
- case SEEK_END:
- assert(fd_ptr->inode);
- ret_offset = fd_ptr->inode->file_size + offset;
- break;
- default:
- return -EINVAL;
- break;
- }
- fd_ptr->offset = ret_offset;
- return ret_offset;
-}
diff --git a/kernel/syscalls/mkdir.c b/kernel/syscalls/mkdir.c
deleted file mode 100644
index e7dec0b..0000000
--- a/kernel/syscalls/mkdir.c
+++ /dev/null
@@ -1,5 +0,0 @@
-#include <syscalls.h>
-
-int syscall_mkdir(const char *path, int mode) {
- return vfs_mkdir(path, mode);
-}
diff --git a/kernel/syscalls/mmap.c b/kernel/syscalls/mmap.c
deleted file mode 100644
index 85b32a3..0000000
--- a/kernel/syscalls/mmap.c
+++ /dev/null
@@ -1,7 +0,0 @@
-#include <sched/scheduler.h>
-#include <syscalls.h>
-
-void *syscall_mmap(SYS_MMAP_PARAMS *args) {
- return mmap(args->addr, args->length, args->prot, args->flags, args->fd,
- args->offset);
-}
diff --git a/kernel/syscalls/msleep.c b/kernel/syscalls/msleep.c
deleted file mode 100644
index d2c8b59..0000000
--- a/kernel/syscalls/msleep.c
+++ /dev/null
@@ -1,9 +0,0 @@
-#include <drivers/pit.h>
-#include <sched/scheduler.h>
-#include <stdio.h>
-#include <syscalls.h>
-
-void syscall_msleep(u32 ms) {
- current_task->sleep_until = pit_num_ms() + ms;
- switch_task();
-}
diff --git a/kernel/syscalls/munmap.c b/kernel/syscalls/munmap.c
deleted file mode 100644
index d57ef36..0000000
--- a/kernel/syscalls/munmap.c
+++ /dev/null
@@ -1,6 +0,0 @@
-#include <sched/scheduler.h>
-#include <syscalls.h>
-
-int syscall_munmap(void *addr, size_t length) {
- return munmap(addr, length);
-}
diff --git a/kernel/syscalls/open.c b/kernel/syscalls/open.c
deleted file mode 100644
index ef5297b..0000000
--- a/kernel/syscalls/open.c
+++ /dev/null
@@ -1,14 +0,0 @@
-#include <errno.h>
-#include <syscalls.h>
-
-int syscall_open(const char *file, int flags, mode_t mode) {
- const char *_file = copy_and_allocate_user_string(file);
- if (!_file) {
- return -EFAULT;
- }
- int _flags = flags;
- int _mode = mode;
- int rc = vfs_open(_file, _flags, _mode);
- kfree((void *)_file);
- return rc;
-}
diff --git a/kernel/syscalls/open_process.c b/kernel/syscalls/open_process.c
deleted file mode 100644
index 2acc744..0000000
--- a/kernel/syscalls/open_process.c
+++ /dev/null
@@ -1,26 +0,0 @@
-#include <assert.h>
-#include <errno.h>
-#include <sched/scheduler.h>
-
-int syscall_open_process(int pid) {
- // TODO: Permission check
- process_t *process = (process_t *)ready_queue;
- for (; process; process = process->next) {
- if (pid == process->pid) {
- break;
- }
- }
- if (!process) {
- return -ESRCH;
- }
-
- vfs_inode_t *inode = vfs_create_inode(
- process->pid, 0 /*type*/, 0 /*has_data*/, 0 /*can_write*/, 1 /*is_open*/,
- process /*internal_object*/, 0 /*file_size*/, NULL /*open*/,
- NULL /*create_file*/, NULL /*read*/, NULL /*write*/, NULL /*close*/,
- NULL /*create_directory*/, NULL /*get_vm_object*/, NULL /*truncate*/,
- NULL /*stat*/, process_signal, NULL /*connect*/);
- int rc = vfs_create_fd(0, 0, 0, inode, NULL);
- assert(rc >= 0);
- return rc;
-}
diff --git a/kernel/syscalls/ppoll.c b/kernel/syscalls/ppoll.c
deleted file mode 100644
index 7c5befa..0000000
--- a/kernel/syscalls/ppoll.c
+++ /dev/null
@@ -1,11 +0,0 @@
-#include <fs/vfs.h>
-#include <poll.h>
-#include <sched/scheduler.h>
-#include <syscalls.h>
-
-int syscall_poll(SYS_POLL_PARAMS *args) {
- struct pollfd *fds = args->fds;
- size_t nfds = args->nfds;
- int timeout = args->timeout;
- return poll(fds, nfds, timeout);
-}
diff --git a/kernel/syscalls/pwrite.c b/kernel/syscalls/pwrite.c
deleted file mode 100644
index b251dbb..0000000
--- a/kernel/syscalls/pwrite.c
+++ /dev/null
@@ -1,6 +0,0 @@
-#include <fs/vfs.h>
-#include <syscalls.h>
-
-int syscall_pwrite(int fd, const char *buf, size_t count, size_t offset) {
- return vfs_pwrite(fd, (char *)buf, count, offset);
-}
diff --git a/kernel/syscalls/randomfill.c b/kernel/syscalls/randomfill.c
deleted file mode 100644
index 3808009..0000000
--- a/kernel/syscalls/randomfill.c
+++ /dev/null
@@ -1,9 +0,0 @@
-#include <random.h>
-#include <typedefs.h>
-
-// This syscall will never fail. At worst a page fault will occur but if
-// the syscall returns the buffer will have been filled with random
-// data.
-void syscall_randomfill(void *buffer, u32 size) {
- get_random(buffer, size);
-}
diff --git a/kernel/syscalls/recvfrom.c b/kernel/syscalls/recvfrom.c
deleted file mode 100644
index c35dcfa..0000000
--- a/kernel/syscalls/recvfrom.c
+++ /dev/null
@@ -1,60 +0,0 @@
-#include <assert.h>
-#include <fs/vfs.h>
-#include <math.h>
-#include <poll.h>
-#include <syscalls.h>
-
-size_t syscall_recvfrom(
- int socket, void *buffer, size_t length, int flags,
- struct two_args
- *extra_args /*struct sockaddr *address, socklen_t *address_len*/) {
-
- struct sockaddr *address = (struct sockaddr *)extra_args->a;
- socklen_t *address_len = (socklen_t *)extra_args->b;
- kprintf("address: %x\n", address);
- kprintf("address_len: %x\n", address_len);
-
- if (flags & MSG_WAITALL) {
- struct pollfd fds[1];
- fds[0].fd = socket;
- fds[0].events = POLLIN;
- poll(fds, 1, 0);
- }
-
- u16 data_length;
- socklen_t tmp_socklen;
- vfs_pread(socket, &tmp_socklen, sizeof(socklen_t), 0);
- if (address_len) {
- *address_len = tmp_socklen;
- }
- if (address) {
- vfs_pread(socket, address, tmp_socklen, 0);
- } else {
- // We still have to throwaway the data.
- char devnull[100];
- for (; tmp_socklen;) {
- int rc = vfs_pread(socket, devnull, min(tmp_socklen, 100), 0);
- assert(rc >= 0);
- tmp_socklen -= rc;
- }
- }
-
- vfs_pread(socket, &data_length, sizeof(data_length), 0);
- // If it is reading less than the packet length that could cause
- // problems as the next read will not be put at a new header. Luckily
- // it seems as if other UNIX systems can discard the rest of the
- // packet if not read.
-
- // Read in the data requested
- int read_len = min(length, data_length);
- int rc = vfs_pread(socket, buffer, read_len, 0);
- // Discard the rest of the packet
- int rest = data_length - read_len;
- char devnull[100];
- for (; rest;) {
- int rc = vfs_pread(socket, devnull, 100, 0);
- assert(rc >= 0);
- rest -= rc;
- }
- return rc;
-}
diff --git a/kernel/syscalls/sendto.c b/kernel/syscalls/sendto.c
deleted file mode 100644
index 678b5b3..0000000
--- a/kernel/syscalls/sendto.c
+++ /dev/null
@@ -1,23 +0,0 @@
-#include <assert.h>
-#include <network/bytes.h>
-#include <network/udp.h>
-#include <syscalls.h>
-
-size_t syscall_sendto(int socket, const void *message, size_t length,
- int flags, struct t_two_args *extra_args /*
- const struct sockaddr *dest_addr,
- socklen_t dest_len*/) {
- const struct sockaddr *dest_addr = (const struct sockaddr *)extra_args->a;
- socklen_t dest_len = (socklen_t)extra_args->b;
- (void)dest_len;
- vfs_fd_t *fd = get_vfs_fd(socket, NULL);
- assert(fd);
- SOCKET *s = (SOCKET *)fd->inode->internal_object;
- OPEN_INET_SOCKET *inet = s->child;
- assert(inet);
- struct sockaddr_in in;
- in.sin_addr.s_addr = inet->address;
- in.sin_port = inet->port;
- send_udp_packet(&in, (const struct sockaddr_in *)dest_addr, message, length);
- return length; // FIXME: This is probably not true.
-}
diff --git a/kernel/syscalls/shm.c b/kernel/syscalls/shm.c
deleted file mode 100644
index 39e272e..0000000
--- a/kernel/syscalls/shm.c
+++ /dev/null
@@ -1,6 +0,0 @@
-#include <fs/shm.h>
-#include <syscalls.h>
-
-int syscall_shm_open(SYS_SHM_OPEN_PARAMS *args) {
- return shm_open(args->name, args->oflag, args->mode);
-}
diff --git a/kernel/syscalls/sigaction.c b/kernel/syscalls/sigaction.c
deleted file mode 100644
index 9882192..0000000
--- a/kernel/syscalls/sigaction.c
+++ /dev/null
@@ -1,9 +0,0 @@
-#include <sched/scheduler.h>
-#include <signal.h>
-#include <syscalls.h>
-
-int syscall_sigaction(int sig, const struct sigaction *restrict act,
- struct sigaction *restrict oact) {
- set_signal_handler(sig, act->sa_handler);
- return 0;
-}
diff --git a/kernel/syscalls/socket.c b/kernel/syscalls/socket.c
deleted file mode 100644
index b5c8000..0000000
--- a/kernel/syscalls/socket.c
+++ /dev/null
@@ -1,5 +0,0 @@
-#include <syscalls.h>
-
-int syscall_socket(SYS_SOCKET_PARAMS *args) {
- return socket(args->domain, args->type, args->protocol);
-}
diff --git a/kernel/syscalls/uptime.c b/kernel/syscalls/uptime.c
deleted file mode 100644
index cb32db5..0000000
--- a/kernel/syscalls/uptime.c
+++ /dev/null
@@ -1,6 +0,0 @@
-#include <drivers/pit.h>
-#include <syscalls.h>
-
-u32 syscall_uptime(void) {
- return (u32)pit_num_ms();
-}
diff --git a/kernel/syscalls/write.c b/kernel/syscalls/write.c
deleted file mode 100644
index f88215d..0000000
--- a/kernel/syscalls/write.c
+++ /dev/null
@@ -1,13 +0,0 @@
-#include <errno.h>
-#include <fs/vfs.h>
-#include <syscalls.h>
-
-int syscall_write(int fd, const char *buf, size_t count) {
- vfs_fd_t *fd_ptr = get_vfs_fd(fd, NULL);
- if (!fd_ptr) {
- return -EBADF;
- }
- int rc = vfs_pwrite(fd, (char *)buf, count, fd_ptr->offset);
- fd_ptr->offset += rc;
- return rc;
-}