From ace0646608c393d8952b14536090c302bed2ee85 Mon Sep 17 00:00:00 2001 From: Miguel Date: Fri, 21 Sep 2018 01:43:25 +0200 Subject: piperei working finally :) --- kernel/syscalls.c | 85 +++++++++++++++++++++++++++++++++++++++---------------- 1 file changed, 61 insertions(+), 24 deletions(-) (limited to 'kernel') diff --git a/kernel/syscalls.c b/kernel/syscalls.c index dfcdaae..ee100e2 100644 --- a/kernel/syscalls.c +++ b/kernel/syscalls.c @@ -28,22 +28,28 @@ //TODO move to process.c and implement per process // static fd fds[MAX_PID][MAX_FD]; -static uint32_t next_fd[MAX_PID]; +static bool open_fd[MAX_PID][MAX_FD]; void fd_init_std_streams(uint32_t pid) { if(pid==0) { //stdin / stdout /stderr - fds[0][next_fd[0]++]=fd_from_ringbuffer(); - fds[0][next_fd[0]++]=fd_from_fb_term(); - fds[0][next_fd[0]++]=fd_from_fb_term(); + fds[0][0]=fd_from_ringbuffer(); + fds[0][1]=fd_from_fb_term(); + fds[0][2]=fd_from_fb_term(); + open_fd[0][0]=true; + open_fd[0][1]=true; + open_fd[0][2]=true; } else { fds[pid][0]=fds[0][0]; fds[pid][1]=fds[0][1]; fds[pid][2]=fds[0][2]; + open_fd[pid][0]=true; + open_fd[pid][1]=true; + open_fd[pid][2]=true; } } @@ -248,22 +254,38 @@ int syscall_execve(const char *name, char *const argv[], char *const env[], int return 0; } +/** helper */ +int nextfd(int pid) +{ + for(int i=0;i