# HG changeset patch # User mir3636 # Date 1547773477 -32400 # Node ID a672d603ccb2233398bc37224cb9b099a1590836 # Parent 68de775c3a2956f9033d1f4ecd43b447c175129e fix diff -r 68de775c3a29 -r a672d603ccb2 src/console.c --- a/src/console.c Fri Jan 18 09:40:22 2019 +0900 +++ b/src/console.c Fri Jan 18 10:04:37 2019 +0900 @@ -215,33 +215,6 @@ release(&input.lock); } -__code cbc_consoleread (struct inode *ip, char *dst, int n, __code(*next)(int ret)) -{ - uint target; - - iunlock(ip); - - target = n; - acquire(&input.lock); - - while (n > 0) { - while (input.r == input.w) { - if (proc->killed) { - release(&input.lock); - ilock(ip); - goto next(-1); - } - - proc->cbc_arg.cbc_console_arg.n = n; - proc->cbc_arg.cbc_console_arg.target = target; - proc->cbc_arg.cbc_console_arg.dst = dst; - proc->cbc_arg.cbc_console_arg.ip = ip; - proc->cbc_arg.cbc_console_arg.next = next; - goto cbc_sleep(&input.r, &input.lock, cbc_consoleread1); - } - } -} - __code cbc_consoleread1 (__code(*next)(int ret)) { int cont = 1; @@ -283,6 +256,33 @@ goto next(target - n); } +__code cbc_consoleread (struct inode *ip, char *dst, int n, __code(*next)(int ret)) +{ + uint target; + + iunlock(ip); + + target = n; + acquire(&input.lock); + + while (n > 0) { + while (input.r == input.w) { + if (proc->killed) { + release(&input.lock); + ilock(ip); + goto next(-1); + } + + proc->cbc_arg.cbc_console_arg.n = n; + proc->cbc_arg.cbc_console_arg.target = target; + proc->cbc_arg.cbc_console_arg.dst = dst; + proc->cbc_arg.cbc_console_arg.ip = ip; + proc->cbc_arg.cbc_console_arg.next = next; + goto cbc_sleep(&input.r, &input.lock, cbc_consoleread1); + } + } +} + int consoleread (struct inode *ip, char *dst, int n) { uint target; diff -r 68de775c3a29 -r a672d603ccb2 src/file.h --- a/src/file.h Fri Jan 18 09:40:22 2019 +0900 +++ b/src/file.h Fri Jan 18 10:04:37 2019 +0900 @@ -34,8 +34,8 @@ }; struct cbc_devsw { - int (*read) (struct inode*, char*, int, __code (*)(int)); - //int (*write)(struct inode*, char*, int, __code (*)(int)); + __code (*read) (struct inode*, char*, int, __code (*)(int)); + //__code (*write)(struct inode*, char*, int, __code (*)(int)); }; extern struct devsw devsw[]; diff -r 68de775c3a29 -r a672d603ccb2 src/syscall.c --- a/src/syscall.c Fri Jan 18 09:40:22 2019 +0900 +++ b/src/syscall.c Fri Jan 18 10:04:37 2019 +0900 @@ -115,6 +115,8 @@ extern int sys_write(void); extern int sys_uptime(void); +extern __code cbc_read(__code(*)(int)); + static int (*syscalls[])(void) = { [SYS_fork] =sys_fork, [SYS_exit] =sys_exit, @@ -139,7 +141,7 @@ [SYS_close] =sys_close, }; -static __code (*cbccodes[])(void) = { +static __code (*cbccodes[])(__code (*)(int)) = { [SYS_cbc_read] = cbc_read, }; diff -r 68de775c3a29 -r a672d603ccb2 src/syscall.h --- a/src/syscall.h Fri Jan 18 09:40:22 2019 +0900 +++ b/src/syscall.h Fri Jan 18 10:04:37 2019 +0900 @@ -20,3 +20,5 @@ #define SYS_link 19 #define SYS_mkdir 20 #define SYS_close 21 + +#define SYS_cbc_read 22