summaryrefslogtreecommitdiff
path: root/kernel/syscalls.c
diff options
context:
space:
mode:
Diffstat (limited to 'kernel/syscalls.c')
-rw-r--r--kernel/syscalls.c5
1 files changed, 4 insertions, 1 deletions
diff --git a/kernel/syscalls.c b/kernel/syscalls.c
index 8ff6241..d579dc3 100644
--- a/kernel/syscalls.c
+++ b/kernel/syscalls.c
@@ -198,6 +198,7 @@ int syscall_write(int file, char *buf, int len,uint32_t pid)
if(!open_fd[pid][file])kpanic("writing to closed file descriptor");
for(int i=0;i<len;i++)
{
+ if(!fd_can_write(&fds[pid][file]))return i;
fd_write(&fds[pid][file],buf[i]);
}
return len;
@@ -432,7 +433,7 @@ uint32_t syscall_dup2(uint32_t oldfd,int newfd, int none2, uint32_t pid)
}
uint32_t syscall_gui_rect(uint32_t p1, uint32_t p2, uint32_t p3, uint32_t pid)
{
- compositor_swap_buffers();
+ compositor_wake();
return 1;
}
uint32_t syscall_gui_win(uint32_t p1, uint32_t p2, uint32_t p3, uint32_t pid)
@@ -449,6 +450,8 @@ uint32_t syscall_generic_test(uint32_t nr,uint32_t p1, uint32_t p2, uint32_t p3,
return !task_runs(p1);
case SYSCALL_READ :
return fd_has(&fds[pid][p1])||fd_eof(&fds[pid][p1]);
+ case SYSCALL_WRITE :
+ return fd_can_write(&fds[pid][p1]);
}
return 1;//other syscalls never block for now.