Luna/libs/libc/include/bits/error.h
apio da2ede3450 Kernel, libc, userspace: Implement file descriptors
Kernel: Implement a descriptor struct which stores the opened node and read offset, and give each task 8 of those.
Implement three syscalls: sys_read, sys_open and sys_close (sys_write still writes to the console instead of using a fd, for now)
Implement three new errors: ENOENT, EBADF and EMFILE.

libc: Implement the new errors, and the new syscalls in syscall().
Also fix _RETURN_WITH_ERRNO() to set errno correctly, which was making strerror() return null, thus crashing perror().

userspace: make init demonstrate the new file API.
2022-10-10 20:21:39 +02:00

26 lines
2.0 KiB
C

#ifndef _BITS_ERROR_H
#define _BITS_ERROR_H
#include <errno.h>
#define _RETURN_WITH_ERRNO(rc, type) \
do { \
if (rc < 0) \
{ \
errno = (int)(-rc); \
return -1; \
} \
return (type)rc; \
} while (0)
#define _RETURN_WITH_MEMORY_ERRNO(rc, type) \
do { \
if ((unsigned long int)rc > 0xffffffffffffff00) \
{ \
errno = (int)((rc)&0xff); \
return (type)-1; \
} \
return (type)rc; \
} while (0)
#endif