c77e752a82
libc: Implement fileno()
2022-10-15 10:28:52 +02:00
d0d6557e99
libc: Add assert()
2022-10-15 10:05:48 +02:00
8398b2e2e4
libc: Change bits/macros.h to use a __lc_ prefix for internal macros
...
That way, we don't pollute user programs with our own 'noreturn' and 'deprecated' macros
2022-10-15 09:52:37 +02:00
d5bc87099f
libc: #define STDOUT_FILENO and STDERR_FILENO
...
Still missing stdin >.<
2022-10-14 21:24:18 +02:00
eb67ab113e
libc: Add ctype.h
2022-10-14 21:12:26 +02:00
0e64c57e10
libc: Change __{stderr, stdout} to {stderr, stdout}
2022-10-14 19:23:14 +02:00
3b83d7ccaf
libc: Implement fsetpos() and fgetpos()
...
Not much to do, since these are kind of equivalent to fseek() and ftell().
2022-10-14 19:12:40 +02:00
743aedcd49
libc: Implement atexit() and _exit()
...
exit() now calls registered handlers before calling _exit().
And initialize_libc() can now register a handler to close stdout and stderr on program termination!! :)
2022-10-12 20:41:55 +02:00
de6041fede
libc: Add fdopen()
2022-10-12 20:19:13 +02:00
5f8376409d
Kernel, libc: Implement EFAULT
2022-10-12 19:25:35 +02:00
4091799701
Kernel, libc: Add ENOEXEC (Exec format error)
2022-10-12 19:15:44 +02:00
531afc3d6f
libc: Add support for the new exec() system call
...
execv() is a temporary wrapper that ignores the second parameter, while execve() and execvp() still error out.
2022-10-12 17:45:58 +02:00
edda41a7bb
libc: Implement fseek(), ftell() and rewind()
...
All three use the new syscall seek() (with its lseek() wrapper in unistd.h)!!
2022-10-12 15:56:03 +02:00
4a5db1dca7
libc: Add lseek()
2022-10-12 15:37:29 +02:00
928ade123c
libc: Add support for the new seek() system call
2022-10-12 15:32:09 +02:00
e40304f2f1
libc: Add off_t to sys/types.h
2022-10-12 15:30:41 +02:00
e90b90c556
Kernel, libc: Round up to nearest page-aligned size instead of down
2022-10-12 12:15:12 +02:00
d89685bb36
libc: Document sys/types.h
2022-10-12 12:07:42 +02:00
1e16a78106
libc: Document functions in sys/mman.h
2022-10-12 12:06:45 +02:00
0d3e7d4463
libc: Document errno.h
2022-10-12 12:01:07 +02:00
b42c866db8
Correct description for fopen()
2022-10-12 11:58:07 +02:00
9f5b3b76d2
libc: Document the function in fcntl.h
2022-10-12 11:57:49 +02:00
f44411aa46
libc: Document the functions in luna.h
2022-10-12 11:54:29 +02:00
6aabe19fb4
libc: Document the functions in stdio.h
2022-10-12 11:51:32 +02:00
ffc223c2cf
libc: Document functions in stdlib.h
...
Also, add prototypes for calloc() and realloc(), which were already implemented but not in the header.
2022-10-12 11:30:21 +02:00
19ee20b6f5
libc: Document the functions in string.h
2022-10-12 11:19:14 +02:00
38e87d8f8f
libc: Document the functions in unistd.h
2022-10-12 11:02:18 +02:00
44834b8a0f
libc: Implement fputs, fputc, putc and putchar
2022-10-12 10:05:14 +02:00
d3ac590e24
Kernel: Remove the sys_getversion() syscall
...
User programs can now acquire this information by reading /dev/version.
2022-10-11 21:31:28 +02:00
80ab982fe4
libc: make stdout and stderr functional
...
what were before one extern FILE* without reference now are opened by libc on program initialization, to point to /dev/console by default.
2022-10-11 21:08:46 +02:00
53a4b3b85e
libc: Add new flags to open()
...
Since we now have write support, we can add O_WRONLY and O_RDWR to fcntl.h :)
2022-10-11 21:07:21 +02:00
12cf37d0a7
Kernel/syscalls: Modify sys_write to accept a file descriptor and write to it
...
Previously, sys_write only wrote to the tty. Now, it uses the VFS interface, as it should.
2022-10-11 21:06:12 +02:00
1278cec065
VFS: Add a 'type' flag to Nodes, implement EISDIR
2022-10-11 17:48:11 +02:00
6c51477197
libc: Implement ferror() and feof()
2022-10-11 16:57:08 +02:00
93f6be9319
libc: Implement the start of a FILE* API (the standard, portable C way of doing file stuff)
2022-10-10 21:08:57 +02:00
9e0bd39964
libc: Implement wrappers for sys_{open,read,write}
...
read() and close() are in unistd.h, but open() in fnctl.h.
I thought only the definitions for O_SOMETHING were in fnctl.h, but it is as it is.
Don't know why, but let's not anger the Unix gods.
The FILE* C API is pending as well.
2022-10-10 20:45:26 +02:00
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
abcf1b6118
Define PAGE_SIZE as 4096 and use it everywhere instead of using 4096 as a magic number
2022-10-08 14:52:28 +02:00
1235ce8b32
Avoid magic numbers
2022-10-08 14:44:48 +02:00
ce6ec3585c
Kernel, libc: Add ENOSYS
...
This error is returned by the kernel/C Library when an attempt is made to use a system call that doesn't exist.
2022-10-08 14:18:25 +02:00
ee7558a9b7
Add a perror() function
2022-10-08 12:42:25 +02:00
8f0b6d80b2
libc: Implement strerror()
2022-10-08 12:29:06 +02:00
71e15e94af
Kernel, libc and userspace: Add basic errno support.
...
Kernel: Add an errno.h header with definitions for each header,
and return those, negated, from syscalls when there is an error.
mmap() returns an invalid address with errno encoded, instead of
returning a negated errno; this address is encoded as ffffffffffffffEE
where EE is errno in hex.
libc: make syscall() return -1 and set errno on error, instead of
returning the raw return value of the system call. Also, add mmap()
and munmap() wrappers in sys/mman.h :).
userspace: make the memeater program show the value of errno
when allocating memory fails.
Things to improve: add perror() and strerror() to make the errno
experience even better! >.<
2022-10-08 12:06:09 +02:00
ad115e9bab
libc: Correct include guards
2022-10-08 11:32:01 +02:00
028a1b1a3c
libc: Enable even more warnings
2022-10-07 18:19:06 +02:00
560b0a1705
libc: Rename the _ folder to bits, as used internally by libraries
2022-10-04 19:11:54 +02:00
48b858af5a
libc: Add strncpy and strncat, and deprecate strcpy and strcat (which, since we're building with -Werror, is an instant ban from using these functions)
2022-10-04 19:08:59 +02:00
a050ed9133
libc: add an internal macros.h header with headers to make attributes less verbose
2022-10-04 19:06:56 +02:00
c6ed8d2abb
libc: remove duplicate declaration of strcpy
2022-10-04 18:59:13 +02:00
cb60e418b2
Add vprintf, (v)sprintf and (v)snprintf to libc + move the non v-printfs to stdio.cpp, since they can now call their v-variants and thus don't depend on internal_printf
2022-10-03 19:59:33 +02:00