kernel/vfs: Don't ignore buffer length in read(stream)
This commit is contained in:
parent
73eee3e599
commit
8fe903a9ff
|
@ -8,6 +8,7 @@ shell_task_return:
|
||||||
call shell_clear_buffer
|
call shell_clear_buffer
|
||||||
call shell_print_prompt
|
call shell_print_prompt
|
||||||
shell_task_loop:
|
shell_task_loop:
|
||||||
|
mov r0, 1
|
||||||
mov r1, [shell_terminal_stream_struct_ptr]
|
mov r1, [shell_terminal_stream_struct_ptr]
|
||||||
mov r2, shell_char_buffer
|
mov r2, shell_char_buffer
|
||||||
call read
|
call read
|
||||||
|
@ -16,7 +17,6 @@ shell_task_loop:
|
||||||
cmp.8 r0, 0
|
cmp.8 r0, 0
|
||||||
ifnz call shell_task_parse_key
|
ifnz call shell_task_parse_key
|
||||||
|
|
||||||
call yield_task
|
|
||||||
rjmp shell_task_loop
|
rjmp shell_task_loop
|
||||||
|
|
||||||
shell_task_parse_key:
|
shell_task_parse_key:
|
||||||
|
|
|
@ -40,7 +40,9 @@ event_loop_end:
|
||||||
call is_task_id_used
|
call is_task_id_used
|
||||||
ifz jmp close_window
|
ifz jmp close_window
|
||||||
call yield_task
|
call yield_task
|
||||||
mov.8 [read_buffer], 0
|
cmp.8 [read_buffer_ack], 1
|
||||||
|
ifz mov.8 [read_buffer], 0
|
||||||
|
ifz mov.8 [read_buffer_ack], 0
|
||||||
rjmp event_loop
|
rjmp event_loop
|
||||||
|
|
||||||
mouse_down:
|
mouse_down:
|
||||||
|
|
|
@ -9,6 +9,8 @@ stream_write_to_terminal:
|
||||||
|
|
||||||
stream_get_input:
|
stream_get_input:
|
||||||
mov r0, [read_buffer]
|
mov r0, [read_buffer]
|
||||||
|
mov [read_buffer_ack], 1
|
||||||
ret
|
ret
|
||||||
|
|
||||||
read_buffer: data.32 0
|
read_buffer: data.32 0
|
||||||
|
read_buffer_ack: data.32 0
|
||||||
|
|
|
@ -53,11 +53,11 @@ tell:
|
||||||
|
|
||||||
; read specified number of bytes into the specified buffer
|
; read specified number of bytes into the specified buffer
|
||||||
; inputs:
|
; inputs:
|
||||||
; r0: number of bytes to read (ignored if file struct is a stream)
|
; r0: number of bytes to read
|
||||||
; r1: pointer to file struct
|
; r1: pointer to file struct
|
||||||
; r2: pointer to destination buffer (always 4 bytes if file struct is a stream)
|
; r2: pointer to destination buffer
|
||||||
; outputs:
|
; outputs:
|
||||||
; none
|
; r0: number of bytes left to read (streams can read short)
|
||||||
read:
|
read:
|
||||||
push r3
|
push r3
|
||||||
push r1
|
push r1
|
||||||
|
@ -73,6 +73,26 @@ read:
|
||||||
pop r3
|
pop r3
|
||||||
ret
|
ret
|
||||||
stream_read:
|
stream_read:
|
||||||
|
push r1
|
||||||
|
push r2
|
||||||
|
|
||||||
|
stream_read_loop:
|
||||||
|
call stream_read_char
|
||||||
|
call yield_task
|
||||||
|
|
||||||
|
cmp.8 [r2], 0
|
||||||
|
ifz jmp stream_read_out
|
||||||
|
|
||||||
|
inc r2
|
||||||
|
dec r0
|
||||||
|
ifnz jmp stream_read_loop
|
||||||
|
|
||||||
|
stream_read_out:
|
||||||
|
pop r2
|
||||||
|
pop r1
|
||||||
|
ret
|
||||||
|
|
||||||
|
stream_read_char:
|
||||||
push r0
|
push r0
|
||||||
push r1
|
push r1
|
||||||
push r2
|
push r2
|
||||||
|
@ -83,7 +103,7 @@ stream_read:
|
||||||
|
|
||||||
; put the result into [r2]
|
; put the result into [r2]
|
||||||
pop r2
|
pop r2
|
||||||
mov [r2], r0
|
mov.8 [r2], r0
|
||||||
|
|
||||||
pop r1
|
pop r1
|
||||||
pop r0
|
pop r0
|
||||||
|
|
Loading…
Reference in New Issue
Block a user