be9026442e
libc: Check for file descriptors 0 and 1, and if they exist do not close and reopen them
2022-10-12 20:19:45 +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
34c35163e4
libc: use the normal names that everybody uses for stdout and stderr
2022-10-12 17:15:57 +02:00
dfdc3b2d11
libc: close fds 0 and 1 before opening stdout and stderr
2022-10-12 17:14:49 +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
a3362429d3
libc: Update strerror()
2022-10-12 12:01:18 +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
c8c4d31cca
Add a FIXME to string.cpp
2022-10-12 11:20:48 +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
c30041b733
fix naming
2022-10-11 21:17:07 +02:00
88a01fcfc7
libc: make perror output to stderr
2022-10-11 21:13:38 +02:00
b67011c626
libc: Use the new write() syscall
...
The new one is write(fd, buf, count).
The old one was write(buf, count).
So the old one tries to pass buf as a file descriptor, and write() complains that 4000000 is too large of a file descriptor and throws EBADF.
We now use the new syscall, through the wrapper that fwrite() provides us.
2022-10-11 21:12:19 +02:00
0f47f59364
libc: make fprintf actually write to the chosen file
...
Also, printf now is kind of an alias for fprintf(stdout,...), as it should be.
2022-10-11 21:10:19 +02:00
2f46e46aa4
libc: Implement fwrite()
...
Now that we have the write() syscall and libc wrapper, fwrite can finally be implemented.
2022-10-11 21:09:30 +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
feb8c1c31b
libc: Implement strchr()
2022-10-11 19:50:18 +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
4f2b3ce5d1
fclose: restore errno after call to free() if close() fails
2022-10-10 21:18:24 +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
49c7900407
Add %m to userspace printf
...
%m as a format specifier is a nonstandard glibc extension, but I like it so I'm implementing it.
What it does is print the value of strerror(errno), without consuming any arguments to printf().
2022-10-08 18:44:14 +02:00
3ee1f34bc4
Forgot to add break :)
...
And that, is why you test before pushing and commiting >.<
2022-10-08 18:08:50 +02:00
c67079dd74
Kernel, libc: Implement %p in *printf()
...
So we can avoid writing (unsigned long)ptr or (uint64_t)ptr everywhere when wanting to print a pointer.
2022-10-08 18:07:33 +02:00
f83a6ace51
Kernel, libc: Add support for providing a status code to exit()
...
The exit() libc function already accepted an integer, but didn't pass it on to the kernel since we had no mechanism for it to do that.
Now, the kernel stores a task's exit status to display it later (and in the future, return it to userspace via wait()/waitpid())
2022-10-08 17:56:40 +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
ac72d64490
Make (v)fprintf alias to (v)printf instead of throwing an error
...
We don't have files :) (yet)
But if someone wants to fprintf(stderr), then fine. Do it. Except it won't be any different from fprintf(stdout) or printf().
2022-10-08 13:45:57 +02:00
ee7558a9b7
Add a perror() function
2022-10-08 12:42:25 +02:00