segment .note.GNU-stack extern __errno_location section .text global ft_read ft_read: cmp rsi, 0 ; check if the buffer is NULL je .exit ; if true go to exit mov rax, 0 ; syscall 0 is for read syscall ; call the system call read cmp rax, 0 ; check if the return value of syscall jl .error ; jump if the syscall return less than 0 jmp .exit ; jump to exit .error: mov rdi, rax ; stock errno value in rdi neg rdi ; errno value in positive (index used by C function) call __errno_location ; rax = &errno mov [rax], edi ; stock the errno return in the address of rax mov rax, -1 ; set the value of rax to -1 jmp .exit ; jump to exit .exit: ret ; return rax value