From d69183c0d13676ce95b2e77de2b9db74d7fdaaa5 Mon Sep 17 00:00:00 2001 From: root <> Date: Wed, 7 May 2025 14:31:55 +0000 Subject: [PATCH] simplify pollfd deletion: by index --- main.s | 27 ++++++++++++++++++++++----- pollfds_remove.s | 36 ------------------------------------ 2 files changed, 22 insertions(+), 41 deletions(-) delete mode 100644 pollfds_remove.s diff --git a/main.s b/main.s index 5b13b5d..837d247 100644 --- a/main.s +++ b/main.s @@ -41,11 +41,7 @@ pollfds_len resb 8 SECTION .text -return: - ret - %include "server.s" -%include "pollfds_remove.s" _start: call make_server @@ -107,7 +103,7 @@ pollfds__scan__found__client: mov edi, r14d syscall - mov rdi, r14 + mov rdi, r15 call pollfds__remove pop rdi @@ -141,6 +137,27 @@ pollfds__append: mov [pollfds_len], r10 ret +; rdi - pollfds array index to remove +pollfds__remove: + mov r11, [pollfds_len] + cmp rdi, r10 + jge return ; XXX index out of bounds, do some other error? + cmp r11, 1 + jle pollfds__clear + mov r10, [pollfds + (r11 - 1) * pollfd_size] + mov [pollfds + rdi * pollfd_size], r10 + sub r11, 1 + mov [pollfds_len], r11 + ret + +pollfds__clear: + mov r10, 0 + mov [pollfds_len], r10 + ret + +return: + ret + exit: mov rax, SYS_EXIT mov rdi, 0 diff --git a/pollfds_remove.s b/pollfds_remove.s deleted file mode 100644 index 9ccdc97..0000000 --- a/pollfds_remove.s +++ /dev/null @@ -1,36 +0,0 @@ -; rdi - fd -pollfds__remove: - mov rax, [pollfds_len] - mov rsi, 0 - call pollfds__remove__loop - mov [pollfds_len], rax - ret - -; Variables: -; rax - array length -; rdi - fd -; rsi - array index -; r11d - pollfds[rdi].fd -pollfds__remove__loop: - cmp rsi, rax - jge return ; fd was not found - mov r11d, [pollfds + rsi * pollfd_size] - add rsi, 1 - cmp r11d, edi - jne pollfds__remove__loop - sub rsi, 1 - -; rax - array length -; rsi - array index to remove -pollfds__remove_index: - cmp rax, 1 - jle pollfds__clear - mov r10d, [pollfds + (rax - 1) * pollfd_size] - mov [pollfds + rsi * pollfd_size], r10d - sub rax, 1 - ret - -; Returns new array length in rax -pollfds__clear: - mov rax, 0 - ret