
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
70 lines
1.3 KiB
ArmAsm
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
|