33 lines
458 B
ArmAsm
33 lines
458 B
ArmAsm
global ft_write
|
|
extern __errno_location
|
|
|
|
ft_write:
|
|
cmp rdi, 0
|
|
jl .err_fd
|
|
test rsi, rsi
|
|
je .err_buffer
|
|
mov eax, 0x1 ; put the syscall number of write
|
|
syscall
|
|
test rax, rax
|
|
js .error
|
|
ret
|
|
|
|
.err_fd:
|
|
call __errno_location wrt ..plt
|
|
mov byte [rax], 22
|
|
mov rax, -1
|
|
ret
|
|
|
|
.err_buffer:
|
|
call __errno_location wrt ..plt
|
|
mov byte [rax], 22
|
|
mov rax, -1
|
|
ret
|
|
|
|
.error:
|
|
mov rdx, rax
|
|
call __errno_location wrt ..plt
|
|
neg rdx
|
|
mov [rax], rdx
|
|
mov rax, -1
|
|
ret |