summaryrefslogtreecommitdiff
path: root/kernel/cpu/syscall.c
diff options
context:
space:
mode:
Diffstat (limited to 'kernel/cpu/syscall.c')
-rw-r--r--kernel/cpu/syscall.c24
1 files changed, 16 insertions, 8 deletions
diff --git a/kernel/cpu/syscall.c b/kernel/cpu/syscall.c
index 1ed5f41..e2ea7e3 100644
--- a/kernel/cpu/syscall.c
+++ b/kernel/cpu/syscall.c
@@ -24,15 +24,17 @@ int syscall_exec(SYS_EXEC_PARAMS *args) {
}
char **new_argv = kallocarray(argc + 1, sizeof(char *));
- for (int i = 0; i < argc; i++)
+ for (int i = 0; i < argc; i++) {
new_argv[i] = copy_and_allocate_user_string(args->argv[i]);
+ }
new_argv[argc] = NULL;
exec(filename, new_argv);
kfree((void *)filename);
- for (int i = 0; i < argc; i++)
+ for (int i = 0; i < argc; i++) {
kfree(new_argv[i]);
+ }
kfree(new_argv);
return -1;
}
@@ -52,8 +54,9 @@ int syscall_pread(SYS_PREAD_PARAMS *args) {
int syscall_read(SYS_READ_PARAMS *args) {
vfs_fd_t *fd = get_vfs_fd(args->fd);
- if (!fd)
+ if (!fd) {
return -EBADF;
+ }
int rc = vfs_pread(args->fd, args->buf, args->count, fd->offset);
fd->offset += rc;
return rc;
@@ -71,19 +74,22 @@ void syscall_exit(int status) {
void syscall_wait(int *status) {
disable_interrupts();
if (!get_current_task()->child) {
- if (status)
+ if (status) {
*status = -1;
+ }
return;
}
if (get_current_task()->child->dead) {
- if (status)
+ if (status) {
*status = get_current_task()->child_rc;
+ }
return;
}
get_current_task()->halts[WAIT_CHILD_HALT] = 1;
switch_task();
- if (status)
+ if (status) {
*status = get_current_task()->child_rc;
+ }
}
int syscall_fork(void) {
@@ -98,8 +104,9 @@ void *align_page(void *a);
int syscall_brk(void *addr) {
void *end = get_current_task()->data_segment_end;
- if (!mmu_allocate_region(end, addr - end, MMU_FLAG_RW, NULL))
+ if (!mmu_allocate_region(end, addr - end, MMU_FLAG_RW, NULL)) {
return -ENOMEM;
+ }
get_current_task()->data_segment_end = align_page(addr);
return 0;
}
@@ -110,8 +117,9 @@ void *syscall_sbrk(uintptr_t increment) {
void *n =
(void *)((uintptr_t)(get_current_task()->data_segment_end) + increment);
int rc2;
- if (0 > (rc2 = syscall_brk(n)))
+ if (0 > (rc2 = syscall_brk(n))) {
return (void *)rc2;
+ }
return rc;
}