Finish -E

This commit is contained in:
2026-09-13 22:04:44 -04:00
parent cf66f92aae
commit 43635ab659
2 changed files with 23 additions and 3 deletions
+19 -2
View File
@@ -66,8 +66,15 @@ cat_file:
# Cat out stdin to stdout # Cat out stdin to stdout
# @param[in] a0: Not used. # @param[in] a0: Not used.
# @param[out] a0: result code. # @param[out] a0: Not used.
cat_stdin: cat_stdin:
addi sp, sp, -16
sd ra, 0(sp)
sd s0, 8(sp)
la t1, show_ends
lb s0, 0(t1) # store if we show ends into s1
.LReadStdinBlock: .LReadStdinBlock:
li a0, 0 li a0, 0
la a1, cat_buf la a1, cat_buf
@@ -75,8 +82,15 @@ cat_stdin:
li a7, 63 li a7, 63
ecall ecall
blez a0, .LCatStdinRet # if we haven't read any bytes, EOF, close FD blez a0, .LCatStdinRet # if we haven't read any bytes, EOF, close FD
mv a2, a0 # move bytes read into bytes needed to write
beqz s0, .LNoEndingsStdinWrite
mv a1, a0
la a0, cat_buf
call _stdout_add_endings
j .LReadStdinBlock
.LNoEndingsStdinWrite:
mv a2, a0 # move bytes read into bytes needed to write
li a0, 1 li a0, 1
la a1, cat_buf la a1, cat_buf
li a7, 64 li a7, 64
@@ -84,6 +98,9 @@ cat_stdin:
j .LReadStdinBlock j .LReadStdinBlock
.LCatStdinRet: .LCatStdinRet:
ld ra, 0(sp)
ld s0, 8(sp)
addi sp, sp, 16
ret ret
# Open fd # Open fd
+4 -1
View File
@@ -46,11 +46,12 @@ _start:
call fetch_argc call fetch_argc
mv s0, a1 # store argc mv s0, a1 # store argc
li s1, 1 li s1, 1
li s2, 0 # processed files
call _check_flags call _check_flags
li t0, 1 li t0, 1
ble s0, t0, .LProcessStdin # use stdin if no commands ble s0, t0, .LProcessStdin # use stdin if no commands, although this is checked later, if no flags are used, we can go ahead and jump
.LProcessFile: .LProcessFile:
mv a0, s1 mv a0, s1
@@ -64,10 +65,12 @@ _start:
ld a0, 0(sp) ld a0, 0(sp)
addi sp, sp, 8 addi sp, sp, 8
call cat_file call cat_file
addi s2, s2, 1
bnez a0, .LReturnFileErr # error if failed bnez a0, .LReturnFileErr # error if failed
.LSkipArg: .LSkipArg:
addi s1, s1, 1 addi s1, s1, 1
blt s1, s0, .LProcessFile blt s1, s0, .LProcessFile
beqz s2, .LProcessStdin # if we reach the end of the file queue, and no files have actually been processed, that means they were all flags, switch to stdin
j .LMainReturnOk j .LMainReturnOk
.LProcessStdin: .LProcessStdin: