Added <errno.h> and made kernel use it

This commit is contained in:
2026-03-25 18:17:42 +01:00
parent 7a57999d05
commit 2f05396651
15 changed files with 189 additions and 135 deletions
+35
View File
@@ -0,0 +1,35 @@
#ifndef _ERRNO_H
#define _ERRNO_H
#include <kernel.h>
#define ERRNO_MAX 4095
#define IS_ERR(_ptr) ((uintptr_t)(_ptr) >= (uintptr_t)(-ERRNO_MAX))
#define ERR_PTR(_err) ((void*)(_err))
#define PTR_ERR(_ptr) ((int)(intptr_t)(_ptr))
// TODO: Add correct errno.h numbers
enum {
SUCCESS = 0,
ENOMEM, // Cannot allocate memory
EPERM, // Operation not permitted
ENOENT, // No entry (no such file or directory)
EIO, // Input/Output error
ENXIO, // No such device or address
EAGAIN, // Resource temporarly busy
EACCES, // Permission denied
EFAULT, // Bad address
ENODEV, // No such device
EINVAL, // Invalid argument
EDOM, // Numerical argument out of domain
ERANGE, // Numerical result out of range
ENOSYS, // Function not implemented
ENOTSUP, // Not supported
EILLSEQ, // Illegal byte sequence
EOVERFLOW, //
EALIGN, // Not aligned
};
#endif
+1 -1
View File
@@ -32,6 +32,6 @@ struct idt_pointer {
} __packed;
int idt_init(void);
void idt_set_gate(uint8_t i, void* handler, uint8_t flags);
void idt_set_gate(uint8_t i, void* handler, uint8_t flags, uint8_t ist);
#endif
+5 -5
View File
@@ -41,11 +41,11 @@ static inline bool pag_is_user_addr(void* vaddr) { return (uintptr_t)vaddr < 0x0
// NOTE: All uint64_t* are VIRTUAL addresses
int pag_init(void);
uint64_t* pag_get_pte(uint64_t* pml4, void* vaddr);
void pag_map(uint64_t* pml4, void* vaddr, void* paddr, uint64_t flags);
void pag_map_region(uint64_t* pml4, void* vaddr, void* paddr, size_t count, uint64_t flags);
void pag_unmap(uint64_t* pml4, void* vaddr);
void pag_unmap_region(uint64_t* pml4, void* vaddr, size_t count);
void pag_protect(uint64_t* pml4, void* vaddr, uint64_t flags);
int pag_map(uint64_t* pml4, void* vaddr, void* paddr, uint64_t flags);
int pag_map_region(uint64_t* pml4, void* vaddr, void* paddr, size_t count, uint64_t flags);
int pag_unmap(uint64_t* pml4, void* vaddr);
int pag_unmap_region(uint64_t* pml4, void* vaddr, size_t count);
int pag_protect(uint64_t* pml4, void* vaddr, uint64_t flags);
void* pag_get_phys(uint64_t* pml4, void* vaddr);
void pag_set_pml4(uint64_t* pml4);
uint64_t* pag_get_pml4(void);
+1 -1
View File
@@ -5,6 +5,6 @@
int pmm_init(void);
void* pmm_alloc(void);
void pmm_free(void*);
int pmm_free(void*);
#endif
+1
View File
@@ -18,6 +18,7 @@ int serial_rcvd(int dev);
char serial_recv(int dev);
void serial_write(int dev, char* buf, size_t len);
void serial_puts(int dev, char* s);
void serial_cls(int dev);
int debugf(char* fmt, ...);
int vdebugf(char* fmt, va_list args);