Add perror() (currently only errors 1-34 from asm-generic/errno-base.h)
This commit is contained in:
60
console.asm
60
console.asm
@ -8,6 +8,46 @@ section .rodata
|
||||
bufferLength equ 4096
|
||||
ERR_buffLen db "<!> ERROR: Failed to complete printf(), reached buffer length!",0xA,0x0
|
||||
lERR_buffLen equ $-ERR_buffLen-1
|
||||
|
||||
; Errors (perror)
|
||||
perrorMsg db "%s: %s",10,0
|
||||
errorMsgs dq em0,em1,em2,em3,em4,em5,em6,em7,em8,em9,em10,em11,em12,em13,em14,em15,em16,em17,em18,em19,em20,em21,em22,em23,em24,em25,em26,em27,em28,em29,em30,em31,em32,em33,em34
|
||||
em0 db "No error",0
|
||||
em1 db "Operation not permitted",0
|
||||
em2 db "No such file or directory",0
|
||||
em3 db "No such process",0
|
||||
em4 db "Interrupted system call",0
|
||||
em5 db "I/O error",0
|
||||
em6 db "No such device or address",0
|
||||
em7 db "Argument list too long",0
|
||||
em8 db "Exec format error",0
|
||||
em9 db "Bad file number",0
|
||||
em10 db "No child processes",0
|
||||
em11 db "Try again",0
|
||||
em12 db "Out of memory",0
|
||||
em13 db "Permission denied",0
|
||||
em14 db "Bad address",0
|
||||
em15 db "Block device required",0
|
||||
em16 db "Device or resource busy",0
|
||||
em17 db "File exists",0
|
||||
em18 db "Cross-device link",0
|
||||
em19 db "No such device",0
|
||||
em20 db "Not a directory",0
|
||||
em21 db "Is a directory",0
|
||||
em22 db "Invalid argument",0
|
||||
em23 db "File table overflow",0
|
||||
em24 db "Too many open files",0
|
||||
em25 db "Not a typewriter",0
|
||||
em26 db "Text file busy",0
|
||||
em27 db "File too large",0
|
||||
em28 db "No space left on device",0
|
||||
em29 db "Illegal seek",0
|
||||
em30 db "Read-only file system",0
|
||||
em31 db "Too many links",0
|
||||
em32 db "Broken pipe",0
|
||||
em33 db "Math argument out of domain of func",0
|
||||
em34 db "Math result not representable",0
|
||||
|
||||
section .bss
|
||||
printfBuff resb bufferLength
|
||||
printfNBuff resb 32
|
||||
@ -15,6 +55,7 @@ section .text
|
||||
global print
|
||||
global puts
|
||||
global printf
|
||||
global perror
|
||||
|
||||
;----- print (char* string) -----;
|
||||
; return value: N/A
|
||||
@ -212,3 +253,22 @@ printf:
|
||||
|
||||
leave
|
||||
ret
|
||||
;----- perror(const char *str) -----;
|
||||
; retrieves last returned error. Uses rax to fetch errno.
|
||||
; errno must be negative
|
||||
; Returns nothing (rax restored to original value)
|
||||
perror:
|
||||
push rax
|
||||
cmp rax, 0
|
||||
jge .quit
|
||||
neg rax
|
||||
cmp rax, 34
|
||||
jg .quit
|
||||
mov rsi, rdi
|
||||
lea rdi, [rel perrorMsg]
|
||||
lea rdx, [errorMsgs + rax*8]
|
||||
mov rdx, [rdx]
|
||||
call printf
|
||||
.quit:
|
||||
pop rax
|
||||
ret
|
||||
|
Reference in New Issue
Block a user