From f18de90868cb4c3e4009eed363d20ca2a667a303 Mon Sep 17 00:00:00 2001 From: Kwarde Date: Sun, 27 Jul 2025 21:17:59 +0200 Subject: [PATCH] 1) REALLY fix strcat crash (git restored wrong file in previous commit) 2) fopen: less labels ffs --- src/file.asm | 17 +++++++---------- src/string.asm | 6 ++++++ 2 files changed, 13 insertions(+), 10 deletions(-) diff --git a/src/file.asm b/src/file.asm index 0645407..f92a8f5 100644 --- a/src/file.asm +++ b/src/file.asm @@ -97,7 +97,7 @@ fgetmod: ; rdi (arg) Pointer to string holding (path+)file name ; rsi Mode to open the file with (see description above) fopen: - %macro createFile 1 + %macro createFile 0 push rdi push rsi call fexist @@ -105,7 +105,7 @@ fopen: pop rdi test rax, 1 jz %%createFile - jmp %1 + jmp %%cnt %%createFile: push rsi push rdi @@ -119,6 +119,7 @@ fopen: syscall pop rdi pop rsi + %%cnt: %endmacro ;;; ;;; ENTRY @@ -144,26 +145,22 @@ fopen: mov rsi, O_RDONLY jmp .open .setMode_w: - createFile .open_w - .open_w: + createFile mov rsi, O_WRONLY | O_TRUNC jmp .open .setMode_a: - createFile .open_a - .open_a: + createFile mov rsi, O_WRONLY | O_APPEND jmp .open .setMode_R: mov rsi, O_RDWR jmp .open .setMode_W: - createFile .open_W - .open_W: + createFile mov rsi, O_RDWR | O_TRUNC jmp .open .setMode_A: - createFile .open_A - .open_A: + createFile mov rsi, O_RDWR | O_APPEND jmp .open diff --git a/src/string.asm b/src/string.asm index b5ba02a..920b594 100644 --- a/src/string.asm +++ b/src/string.asm @@ -66,10 +66,12 @@ strcpy: ; r8* Backup for rdi (point to start of dest) ; r9* Backup for rsi ; r10* Backup for rdi (point to end of dest) +; r11* Backup for strlen(dest) strcat: mov r8, rdi mov r9, rsi call strlen + mov r11, rax sub rdx, rax dec rdi mov r10, rdi @@ -78,13 +80,17 @@ strcat: cmp rax, rdx jb .copy dec rdx + .copy: + cmp rdx, r11 + jle .quit mov rcx, rdx mov rsi, r9 mov rdi, r10 cld rep movsb mov byte [rdi], EOS + .quit: mov rax, r8 ret