diff --git a/src/console.asm b/src/console.asm index ab6534b..4fecfa9 100644 --- a/src/console.asm +++ b/src/console.asm @@ -194,10 +194,12 @@ __INTERNAL_fmt: jmp .insertString %endmacro - %macro check_formatted_len 2 ;check_format_len [return_label] [offset] + %macro check_formatted_len 2 ;check_format_len [return_label] [length offset] test rbx, rbx jz %%checkBufferLen - cmp r11, rbx + mov rax, r11 + add rax, %2 + cmp rax, rbx jae .wrapup jmp .flushReturn_%1 %%checkBufferLen: @@ -260,6 +262,7 @@ __INTERNAL_fmt: cmp byte [rdi], EOS je .wrapup check_formatted_len 0,1 + ;.flushReturn_0: cmp byte [rdi], '\' je .asciiReplacement cmp byte [rdi], '%' @@ -286,6 +289,7 @@ __INTERNAL_fmt: jmp .invalidReplacement .replaceAscii: check_formatted_len 1, 1 + ;.flushReturn_1: write_format_data byte,r10,r8b add rdi, 2 inc r10 @@ -443,18 +447,43 @@ __INTERNAL_fmt: .insertString: test rsi, rsi jnz .doInsertString - check_formatted_len 2, 7 + check_formatted_len 2, 1 + ;.flushReturn_2: write_format_data byte,r10,'(' - write_format_data qword,r10+1,'null' - write_format_data byte,r10+5,')' - add r10, 6 - add r11, 6 + inc r10 + inc r11 + check_formatted_len 21, 1 + ;.flushReturn_21: + write_format_data byte,r10,'n' + inc r10 + inc r11 + check_formatted_len 22, 1 + ;.flushReturn_22: + write_format_data byte,r10,'u' + inc r10 + inc r11 + check_formatted_len 23, 1 + ;.flushReturn_23: + write_format_data byte,r10,'l' + inc r10 + inc r11 + check_formatted_len 24, 1 + ;.flushReturn_24: + write_format_data byte,r10,'l' + inc r10 + inc r11 + check_formatted_len 25, 1 + ;.flushReturn_25: + write_format_data byte,r10,')' + inc r10 + inc r11 jmp .endInsertString .doInsertString: cmp byte [rsi], EOS je .endInsertString check_formatted_len 3, 1 + ;.flushReturn_3: mov r8b, byte [rsi] write_format_data byte,r10,r8b inc rsi @@ -512,13 +541,23 @@ __INTERNAL_fmt: xor r10, r10 .flush_ret: cmp r9b, 0 - je .flushReturn_0 + je .flushReturn_0 ;.process cmp r9b, 1 - je .flushReturn_1 + je .flushReturn_1 ;.replaceAscii cmp r9b, 2 - je .flushReturn_2 + je .flushReturn_2 ;.insertString "(null) + cmp r9b, 21 + je .flushReturn_21 ;... + cmp r9b, 22 + je .flushReturn_22 ;... + cmp r9b, 23 + je .flushReturn_23 ;... + cmp r9b, 24 + je .flushReturn_24 ;... + cmp r9b, 25 + je .flushReturn_25 ;... cmp r9b, 3 - je .flushReturn_3 + je .flushReturn_3 ;.doInsertString .wrapup: test rbx, rbx diff --git a/src/tests.asm b/src/tests.asm index 25425a2..1326a8c 100644 --- a/src/tests.asm +++ b/src/tests.asm @@ -422,11 +422,7 @@ section .rodata addTest(fgetmod2, "fgetmod(statbuff2)") fgetmodStr db "\t- File permissions of file '%s': %04o\n",EOS - fmt_str db "%s",EOS - section .bss - fmt_out resb 5 - fmt_over resb 64 inputBuffer_4 resb 4 inputBuffer_32 resb 32 strBuff1 resb 64 @@ -1665,16 +1661,6 @@ _start: sub rcx, r14 call printf - lea rdi, [rel fmt_out] - mov rsi, 5 - lea rdx, [rel fmt_str] - xor rcx, rcx - call format - lea rdi, [rel fmt_out] - call puts - lea rdi, [rel fmt_over] - call puts - ;--- exit() xor rdi, rdi call exit