apio
da2ede3450
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.
26 lines
2.0 KiB
C
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 |