diff options
| author | Anton Kling <anton@kling.gg> | 2024-06-26 21:34:40 +0200 | 
|---|---|---|
| committer | Anton Kling <anton@kling.gg> | 2024-06-26 21:34:40 +0200 | 
| commit | e15065fe45f8004adcc8b69bbbe680ced0d530a1 (patch) | |
| tree | 19dab20babd5169a8266faf133d41a4ebd61f1f6 /kernel/syscalls | |
| parent | 2e2f89c7508dede2c970e6061c2f66d4536162ca (diff) | |
Kernel: Move all syscalls into one file
Diffstat (limited to 'kernel/syscalls')
| -rw-r--r-- | kernel/syscalls/accept.c | 5 | ||||
| -rw-r--r-- | kernel/syscalls/bind.c | 5 | ||||
| -rw-r--r-- | kernel/syscalls/chdir.c | 6 | ||||
| -rw-r--r-- | kernel/syscalls/clock_gettime.c | 10 | ||||
| -rw-r--r-- | kernel/syscalls/fstat.c | 11 | ||||
| -rw-r--r-- | kernel/syscalls/ftruncate.c | 6 | ||||
| -rw-r--r-- | kernel/syscalls/getcwd.c | 10 | ||||
| -rw-r--r-- | kernel/syscalls/isatty.c | 14 | ||||
| -rw-r--r-- | kernel/syscalls/kill.c | 15 | ||||
| -rw-r--r-- | kernel/syscalls/lseek.c | 34 | ||||
| -rw-r--r-- | kernel/syscalls/mkdir.c | 5 | ||||
| -rw-r--r-- | kernel/syscalls/mmap.c | 7 | ||||
| -rw-r--r-- | kernel/syscalls/msleep.c | 9 | ||||
| -rw-r--r-- | kernel/syscalls/munmap.c | 6 | ||||
| -rw-r--r-- | kernel/syscalls/open.c | 14 | ||||
| -rw-r--r-- | kernel/syscalls/open_process.c | 26 | ||||
| -rw-r--r-- | kernel/syscalls/ppoll.c | 11 | ||||
| -rw-r--r-- | kernel/syscalls/pwrite.c | 6 | ||||
| -rw-r--r-- | kernel/syscalls/randomfill.c | 9 | ||||
| -rw-r--r-- | kernel/syscalls/recvfrom.c | 60 | ||||
| -rw-r--r-- | kernel/syscalls/sendto.c | 23 | ||||
| -rw-r--r-- | kernel/syscalls/shm.c | 6 | ||||
| -rw-r--r-- | kernel/syscalls/sigaction.c | 9 | ||||
| -rw-r--r-- | kernel/syscalls/socket.c | 5 | ||||
| -rw-r--r-- | kernel/syscalls/uptime.c | 6 | ||||
| -rw-r--r-- | kernel/syscalls/write.c | 13 | 
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; -} |