x64-httpd/clients.s
root 8ab750ba97 bugfix: removing pollfds[0] actually removed pollfds[-1]
this bug created this weird behaviour:

1. client 1 connects
2. client 2 connents
3. client 1 disconnects
4. client 2 sends a line
5. client 2 is disconnected by the server
2025-05-13 12:22:36 +00:00

70 lines
1.3 KiB
ArmAsm

; edi - fd
clients__append:
; TODO check against client_capacity
mov r10, [clients_len]
imul r10, client_size
add r10, clients
mov [r10], edi
add qword [clients_len], 1
mov r11, 4
clients__append__write_zeros:
cmp r11, 8
jge return
mov byte [r10 + r11], 0
add r11, 1
jmp clients__append__write_zeros
; edi - fd
clients__search:
mov r11, [clients_len]
imul r11, client_size
add r11, clients
mov r10, clients
clients__search__loop:
cmp r10, r11
jge clients__search__fail
mov r8d, [r10]
cmp r8d, edi
je clients__search__succ
add r10, client_size
jmp clients__search__loop
clients__search__fail:
mov r10, -1
clients__search__succ:
mov rax, r10
ret
; rdi - address of client within clients array
clients__remove:
mov r10, [clients_len]
cmp r10, 1
jle clients__clear
add r10, -1
mov [clients_len], r10
mov r11, r10
imul r11, client_size
add r11, clients
mov r10, 0
clients__remove__loop:
cmp r10, client_size
jge return
mov r8b, [r11 + r10]
mov [rdi + r10], r8b
add r10, 1
jmp clients__remove__loop
; rdi - address of client within clients array
clients__clear:
mov r10, 0
mov [clients_len], r10
ret