60c6e764a4
libos+apps: Add some missing functionality to File and eliminate any trace of C from cat and edit
continuous-integration/drone/push Build is passing
2023-04-13 17:31:21 +02:00
26ff964ec1
libos: Add a new main() function
2023-04-13 17:04:59 +02:00
d97bf991d1
libos: Add a very bare-bones C++ RAII File class
2023-04-12 21:46:10 +02:00
3618a41bcd
apps: Add rm
continuous-integration/drone/push Build is passing
2023-04-12 18:11:43 +02:00
1b4f48b92c
sh: Display the working directory as part of the prompt
continuous-integration/drone/push Build is passing
2023-04-11 22:45:33 +02:00
3a45f4af53
su: Change the current directory to the user's home on login
continuous-integration/drone/push Build is passing
2023-04-11 22:15:46 +02:00
dfce93c18f
ls: List the current directory by default instead of the root directory
2023-04-11 22:13:54 +02:00
66c2896652
su: Use termios ioctls to turn off echoing and read a password
continuous-integration/drone/push Build is passing
2023-04-09 11:24:34 +02:00
46be0bd458
apps: Install su as setuid
continuous-integration/drone/push Build is passing
2023-04-08 17:01:26 +02:00
8b45766aaa
su: Use user names and read from the password file instead of using raw user IDs
2023-04-08 16:31:33 +02:00
3867a29a10
apps: Add mkdir, chown and chmod
continuous-integration/drone/push Build is passing
2023-04-08 14:47:58 +02:00
46ee0eb937
sh: Show hashtag on root's prompt
2023-04-08 14:47:50 +02:00
3da1849c99
kernel+libc: Add set* and get* syscalls for UIDs and GIDs
2023-04-08 13:50:18 +02:00
95a93a7f66
sh: Parse arguments
2023-04-08 12:09:43 +02:00
0eab03848c
sh: Remove unused include
continuous-integration/drone/push Build is passing
2023-04-07 15:41:37 +02:00
9bb1720cca
libc: Add execvp() and execvpe()
continuous-integration/drone/push Build is passing
2023-04-07 15:39:10 +02:00
3a28771520
kernel+libc+apps: Add support for environment variables
2023-04-07 15:03:38 +02:00
4cac49038c
sh: Use StringBuilder instead of C-like manual joining
2023-04-07 12:11:28 +02:00
d07b00a892
all: Move all warning flags to a common CMake variable
2023-04-07 12:02:49 +02:00
8e8706be27
sh: Use try_move instead of try_set
...
Looks like Vector does not like being copied. I'll have to look into that later...
2023-04-07 11:52:59 +02:00
1f0e185904
kernel: Use try_set_value(_or_error) in various places
2023-04-07 10:55:04 +02:00
c752b2b343
libos: Put everything under the os namespace
2023-04-07 10:40:46 +02:00
e99ba4df36
date: Make the --date option require a value
continuous-integration/drone/push Build is passing
2023-03-30 21:39:42 +02:00
64bca780a7
kernel: Add /dev/zero
continuous-integration/drone/push Build is passing
2023-03-30 21:19:16 +02:00
61f969c60c
ls: Explicitly initialize booleans to false
2023-03-29 22:19:53 +02:00
43f90c4f88
cat: Use ArgumentParser
continuous-integration/drone/push Build is passing
2023-03-29 22:10:51 +02:00
e6645ed607
StringView+apps: Add a _sv literal suffix to not confuse function overloads
...
C++ was being naughty and implicitly casting our fallback const char* to a boolean.
2023-03-29 22:10:01 +02:00
75c48e996a
ArgumentParser+date: Add value arguments
continuous-integration/drone/push Build is passing
2023-03-29 21:46:07 +02:00
d68f6bd76b
ArgumentParser+ls: Add switch arguments
continuous-integration/drone/push Build is passing
2023-03-29 19:25:11 +02:00
a164dcc160
libos: Add libos + very basic ArgumentParser
...
continuous-integration/drone/push Build is passing
libluna but for stuff that interests only userspace, like an argument parser or files or stuff like that.
2023-03-29 18:27:02 +02:00
724dab636c
apps: Switch to C++
continuous-integration/drone/push Build is passing
2023-03-29 17:56:56 +02:00
7b0b3dabc4
apps: Add ls
continuous-integration/drone/push Build is passing
2023-03-29 01:07:58 +02:00
a43550fb9a
apps: Add date
continuous-integration/drone/push Build is passing
2023-03-24 21:48:43 +01:00
54a4ebe5bb
sh+edit: Miscellaneous fixes
continuous-integration/drone/push Build is passing
2023-03-24 20:53:53 +01:00
e76ccd6c4c
kernel+libc+init: Add getppid() and wait()
continuous-integration/drone/push Build is passing
2023-03-24 17:39:55 +01:00
7efcc06090
kernel+init+sh: Implement parent processes and waitpid(-1, ...)
continuous-integration/drone/push Build is passing
2023-03-24 17:37:04 +01:00
f084b57f39
kernel+sh: Allow using Ctrl+D to send EOF
continuous-integration/drone/push Build is failing
2023-03-24 17:21:21 +01:00
a18e50ff34
apps: Add cat and edit
continuous-integration/drone/push Build is passing
2023-03-24 00:52:26 +01:00
e2eb9a92cb
sh: Don't do anything if Enter is pressed with no command
2023-03-24 00:51:42 +01:00
b6fb5f3dfe
kernel+libc: Implement waitpid()
continuous-integration/drone/push Build is passing
2023-03-23 22:42:24 +01:00
355dd6c32b
apps: Add sh
continuous-integration/drone/push Build is passing
2023-03-23 22:19:54 +01:00
00672c4b22
apps/hello: Demo fgets
continuous-integration/drone/push Build is passing
2023-03-23 21:35:21 +01:00
31ef96ebfc
libc: Add stdin
2023-03-19 19:19:20 +01:00
40f01c825d
libc: Add fork()
continuous-integration/drone/push Build is passing
2023-03-18 23:58:56 +01:00
54f2d35416
kernel: Add the fork() system call
2023-03-18 23:45:48 +01:00
e664af4c2b
libc: Add execv()
continuous-integration/drone/push Build is passing
2023-03-18 22:31:16 +01:00
a4ac3c85ed
kernel+libc: Copy argv to userspace
continuous-integration/drone/push Build is passing
2023-03-18 22:25:19 +01:00
7f50893786
kernel/exec: Copy argv from userspace
continuous-integration/drone/push Build is passing
2023-03-18 21:55:16 +01:00
cb1ef3e404
libc: Add (v)fprintf and make (v)printf use that
...
continuous-integration/drone/push Build is passing
Let's free libc of console_write!
2023-03-18 20:11:19 +01:00
629ed9e43b
libc: Start switching to /dev/console for console IO and add a proper init
2023-03-18 19:23:18 +01:00
8c831a6906
libc: Add mknod()
continuous-integration/drone/push Build is passing
2023-03-18 09:13:31 +01:00
7173c05a22
kernel: Add support for special device files and add a mknod() syscall
2023-03-18 09:10:33 +01:00
8c72e9a49a
kernel: Add an exec() system call
...
continuous-integration/drone/push Build is passing
Doesn't support arguments or environment for now.
2023-03-16 22:44:58 +01:00
3cc2e4b2a4
app: Use C FILE instead of POSIX fd, and switch back to /etc/motd
continuous-integration/drone/push Build is passing
2023-03-12 17:36:56 +01:00
d66506256d
kernel/VFS+libc: Introduce modes
continuous-integration/drone/push Build is passing
2023-03-12 16:55:46 +01:00
682d3c753e
kernel+libc: Add mkdir()
continuous-integration/drone/push Build is passing
2023-03-12 15:32:09 +01:00
b54a7f3a80
kernel+libc: Add O_* flags and parse them in open()
...
continuous-integration/drone/push Build is passing
O_RDONLY, O_WRONLY, O_RDWR, O_TRUNC, O_CREAT and O_EXCL are fully implemented.
O_APPEND is partially implemented.
Other flags are not here yet.
2023-03-12 14:43:58 +01:00
c0a7f6776f
kernel+libc: Add getpid()
continuous-integration/drone/push Build is passing
2023-03-11 22:19:58 +01:00
8fa72f3cf0
kernel+libc: Implement read()
continuous-integration/drone/push Build is passing
2023-03-11 18:02:50 +01:00
810c4bc257
kernel+libc: Start interfacing with the VFS from userspace (open & close)
...
This commit adds open and close syscalls to the kernel, and adds matching wrappers to libc.
No read/write support, so file descriptors are kind of useless for now.
2023-03-11 17:45:20 +01:00
9afff7c544
kernel: Add a fun splash screen during boot :)
...
continuous-integration/drone/push Build is passing
Mostly for fun.
Has a lot of delay in order to see the actual splash screen.
2023-02-27 16:23:51 +01:00
e676fb8299
libc: Add a wide range of time manipulation functions, including reentrant variants
2023-01-13 21:06:27 +01:00
2d2db300b0
libc: Add malloc(), calloc(), realloc() and free()
continuous-integration/drone/push Build is passing
2023-01-13 20:00:20 +01:00
d864bda751
libc: Add (de)allocate_memory wrappers located in sys/mman.h
2023-01-13 19:08:02 +01:00
586ca19b62
Add a VERY BASIC and hacky way of allocating memory from userspace
...
continuous-integration/drone/push Build is passing
Only supports one-page allocations and doesn't have libc wrappers, which means it has to be invoked using syscall().
2023-01-11 23:02:42 +01:00
c82ed5df01
Enable -Os on all targets
2023-01-10 18:13:21 +01:00
7e377ef712
Implement printf()
continuous-integration/drone/push Build is passing
2023-01-07 01:49:26 +01:00
7fb2807d0c
libc: Implement time() using clock_gettime().
...
continuous-integration/drone/push Build is passing
The cool POSIX kids use clock_gettime() now because it has NANOSECONDS (and different clocks!),
but ANSI C prefers this function.
We can still implement it based on clock_gettime(), we just have to discard the NANOSECONDS.
2023-01-07 00:27:23 +01:00
a8a64863c8
kernel, libc: Add clock_gettime()
2023-01-07 00:21:08 +01:00
80f5c790f8
Implement string formatting into libc :)
...
continuous-integration/drone/push Build is passing
Of course, using <luna/Format.h> makes it so simple. No need for duplicate code!
2023-01-06 20:15:43 +01:00
c3653cd4e6
More stdlib.h implementation + commenting + atexit()
continuous-integration/drone/push Build is passing
2023-01-06 19:40:25 +01:00
30555f8e5a
Skip these because CI needed a toolchain rebuild
continuous-integration/drone/push Build is passing
2023-01-06 15:00:49 +01:00
71414c0653
Explicitly set the link path to make it build on CI
continuous-integration/drone/push Build is failing
2023-01-06 14:28:53 +01:00
db1941140c
Explicitly include system headers to make it build on CI
continuous-integration/drone/push Build is failing
2023-01-06 13:40:53 +01:00
129e3c434a
Switch to C for userspace, with a very bare-bones libc!!
continuous-integration/drone/push Build is failing
2023-01-06 13:31:14 +01:00
fd8a0175d9
Add a syscall infrastructure (our baby program can print to the console now!)
continuous-integration/drone/push Build is passing
2023-01-05 22:39:56 +01:00
0ea9974512
First user process!
...
continuous-integration/drone/push Build is passing
Putting it all together, we have a user process that successfully calls sys_exit() w/o crashing.
2023-01-05 21:55:21 +01:00
f2cc797599
Add a simple ELF loader
continuous-integration/drone/push Build is passing
2022-12-23 13:09:21 +01:00
cf758fdfdc
Initial commit :)
2022-11-13 10:09:09 +01:00
42efc21110
Start implementing read and write support in tmpfs
...
write seems to work fine, read just hangs there, waiting.
2022-11-12 20:11:26 +01:00
bde9a97db5
sh: Add a sleep command
2022-11-12 17:44:13 +01:00
16e6fba2d0
Add a bit more C++ stuff to the C++ app
2022-11-12 13:12:51 +01:00
bf1d3d3f05
mkdir: Print newline after usage
2022-11-12 12:53:33 +01:00
5a1d15d2b5
Show only short names of apps when installing
2022-11-10 17:55:41 +01:00
d1dea3f1d6
apps: Add support for C++ apps alongside C ones
2022-11-09 12:01:48 +01:00
033c41cbd7
Kernel: Rework the uid/gid system to make it compliant
2022-11-09 09:54:07 +01:00
98da473fdc
Run clang-format
2022-11-08 19:07:43 +01:00
054d5a8bb4
Build system: Prettify build
2022-11-08 18:03:43 +01:00
00f9981f51
Userspace: Enable dead code stripping
2022-11-08 17:39:34 +01:00
88011fc162
init: Use fread() properly
2022-11-06 14:52:50 +01:00
7afbff08b6
apps: Add a little screen utility
...
It tells you the resolution of your screen :)
2022-11-02 21:00:23 +01:00
497a52dd82
apps: add a little mkdir utility
2022-10-31 09:53:52 +01:00
a7e4f2bdd2
sh: Make it much more versatile
...
This commit implements:
Argument matching, to show help and version
Support for running scripts
Support for parsing and running commands (via -c)
This is the first step to implementing the system() libc function.
2022-10-30 19:09:18 +01:00
e58aa361c8
sh: Show message when child called abort()
2022-10-30 18:36:52 +01:00
00f90246c8
Kernel: Implement very basic escape sequences for TextRenderer
2022-10-30 18:34:40 +01:00
4c096bd36c
uptime: break time down into more understandable units
...
80 seconds -> 1 minute, 20 seconds for example
647 seconds would be 10 minutes, 47 seconds
and more...
2022-10-30 10:31:59 +01:00
6df5b8a703
Make backspace work
2022-10-30 10:08:52 +01:00
e640c6e245
Kernel, libc, userspace: Add file timestamps (atime,ctime,mtime)
2022-10-30 09:57:17 +01:00
e705810af3
apps: Add a new date utility
...
This program tells you the current date and time :)
2022-10-30 09:09:24 +01:00
e2b5c1bfdd
uptime: Use clock_gettime instead of reading from /dev/uptime
2022-10-30 09:09:03 +01:00
a9da58421f
su: do not pass out-of-bounds argv to execv when argc is 1
2022-10-29 20:13:40 +02:00
8395eb16f6
session: endpwent on exit
2022-10-29 10:18:39 +02:00
33ed6e5c17
su: endpwent on exit
2022-10-29 10:01:51 +02:00
8375701bf6
session, su: Split password-collecting logic into a separate function
2022-10-29 10:01:44 +02:00
3e052c72a0
init: don't wait before executing the session binary
2022-10-29 10:01:17 +02:00
e9092ab235
sh: Display username instead of shell's PID in prompt
2022-10-28 21:57:07 +02:00
0b838572e1
apps: Add a new session program which manages user login
2022-10-28 21:56:52 +02:00
91470851cd
stat: Show username of file owner
2022-10-28 21:00:33 +02:00
5aba1c5f15
su: Make it setuid root, ask for a password, and accept a username
...
It asks for a password only if you are not root, obviously.
2022-10-28 20:57:13 +02:00
477af66cdc
ps: Show usernames of processes, using getpwuid()
2022-10-28 20:55:39 +02:00
b8296eb92d
su: Also set group ID
2022-10-28 17:55:56 +02:00
fa0dc4b18c
apps: Remove sym and crash
...
Not necessary anymore.
2022-10-28 17:53:22 +02:00
68d0d0b759
apps: Add a new su utility
2022-10-28 17:52:46 +02:00
09a615bd99
Kernel, libc: Expose processes' UID and GID in pstat()
2022-10-28 17:31:34 +02:00
2269ec267c
apps: Add a 'stat' utility
2022-10-28 17:14:20 +02:00
77d331b258
init: Open /etc/motd with O_CLOEXEC to avoid leaking this file to children
2022-10-28 17:13:45 +02:00
fcf53ef6a5
Kernel: Make waitpid() block by default unless WNOHANG is specified
2022-10-27 17:05:42 +02:00
f004122735
cat: Remove unnecessary include
2022-10-26 20:55:08 +02:00
41f7232b77
Devices: Return EOF after first read for some devices
...
Still not optimal.
2022-10-26 20:54:47 +02:00
d5a64319f9
apps: Add cat
2022-10-26 20:51:20 +02:00
2512acc716
ls: Use command-line arguments
2022-10-26 20:30:22 +02:00
6892fd96d0
sh: Split a command into arguments and pass those on
...
This is a big achievement!!
2022-10-26 20:06:21 +02:00
23b12d2d56
sh: Clear exit status if we do not execute another command
2022-10-26 19:39:04 +02:00
5492b1b44d
sh: Implement our own execvp() while we wait for libc.
...
Of course, this is a very primitive execvp with hardcoded paths.
If it were decent, it would be integrated into libc instantly.
2022-10-26 19:36:09 +02:00
7d20c507b1
Kernel, libc, userspace: Implement command-line arguments (argv)
...
The only thing missing now is for sh to pass them on.
2022-10-26 18:57:06 +02:00
0bad662c2f
sh: If fork() fails, show an error containing fork
2022-10-26 17:13:47 +02:00
af452e2b2a
Kernel, libc: Add dup2()
2022-10-25 18:58:06 +02:00
8bf2904d74
libc: Implement a basic subset of dirent.h
2022-10-23 14:41:45 +02:00
32db366781
apps: Add a little ls utility that lists the files in /bin
2022-10-23 14:06:11 +02:00
06f9ffc184
libc: Add EXIT_SUCCESS, EXIT_FAILURE, RAND_MAX and BUFSIZ
2022-10-22 21:39:51 +02:00
26324259f2
uname: Use fgets()
2022-10-22 15:43:21 +02:00
a1a1157151
sh: update it
2022-10-22 15:09:09 +02:00
4aa979bd87
sh: remove duplicate code
2022-10-22 15:08:27 +02:00
189986d23f
libc: Rename pstname() to pstatname()
...
To avoid confusion with ptsname().
2022-10-22 14:30:41 +02:00
727e227b09
apps: Add ps (uses pstat)
2022-10-22 14:26:59 +02:00
31e0f0efed
uptime: Use fgets()
2022-10-22 14:23:34 +02:00
27a18a608c
libc: Implement fgets, fgetc, getc, getchar (with buffered read IO)
2022-10-22 11:38:16 +02:00
b2f5a0502f
Kernel, libc: Implement O_NONBLOCK
2022-10-21 21:51:03 +02:00
da61e3648f
Kernel: Implement blocking reads
...
This is a huge step forward!! bc actually runs now, without echo or backspace, but it runs!!
2022-10-21 21:26:19 +02:00
0720b3245b
sh: Do not backspace if command is empty
2022-10-20 19:32:32 +02:00
b69fbd46bf
init: Add a Message of the Day
2022-10-20 19:27:37 +02:00
bd4c587409
sh: Try to execute programs in /bin if they are not found
2022-10-20 19:12:17 +02:00
de167c3c67
sh: Show last command' exit status in prompt if non-zero
2022-10-20 08:21:18 +02:00
44bd93b8b4
apps: Add a hello app
2022-10-19 21:13:47 +02:00
f682258fc9
sym: do not sleep
2022-10-19 21:13:38 +02:00
2c813f5901
apps: Add more simple apps
...
Now that we can start them at will from the command line, bring them on!!
2022-10-19 21:11:38 +02:00
aebd860947
libc: Add stdin
...
Aka keyboard :)
2022-10-19 20:43:04 +02:00
ba57f32f39
init: wait less before starting sh
2022-10-19 20:36:27 +02:00
a815beacfb
sh: add builtins
2022-10-19 20:34:10 +02:00
20db8eaba6
Init: exit if the primary child process exits
2022-10-19 20:33:59 +02:00
7e9744419e
sh: Improve it
2022-10-19 20:16:21 +02:00
3c5c92c7c3
sh: Add a simple interactive shell
2022-10-19 19:42:05 +02:00
f3af3e252b
Kernel: refresh task_misbehave()
...
That function was severely outdated.
2022-10-19 17:26:36 +02:00
656667812a
Kernel: reparent child processes to PID 1 when their parent exits
2022-10-19 17:16:01 +02:00
671f2a2de3
Kernel, libc: Implement waitpid()
...
FIXME: exec() is now doing weird page table stuff. But at least it works, no panics :)
2022-10-18 21:30:52 +02:00
f1bfa6bec8
Build system: more cflags + stripping
2022-10-18 18:28:28 +02:00
01564cb905
libc: Adapt libc to getprocid() + add getppid()
2022-10-18 17:36:33 +02:00
3c1146f2c5
libc: Implement setjmp() and longjmp()
2022-10-17 21:22:18 +02:00
494b48bbe3
init: Adjust init
2022-10-17 20:53:09 +02:00
8b17065718
Kernel, libc: Rename gettid() to getpid() and move it to unistd.h
2022-10-17 20:08:44 +02:00
1e96a45f33
Change 'tid' to 'PID' in init.c
...
I think tasks can be considered programs now. So, gettid() is equal to getpid().
In fact, it should be renamed. And moved to unistd.h. Soon.
2022-10-17 19:39:26 +02:00
64f5078494
Kernel, libc: Implement fork()
...
This time for real.
Also, add a new per-user-task virtual address allocator (UserHeap), so that mmap'ed pages are in user range and can be copied.
2022-10-17 18:43:35 +02:00
3bf4f854c7
init: return 0 at the end of main
2022-10-17 17:19:31 +02:00
8b70635e79
Do not strip apps
2022-10-17 17:19:23 +02:00
9b39d618de
Kernel, libc: Implement spawn()
...
This function is a Luna alternative to fork() and exec().
Why? Simply because I can't figure out for the life of me how to implement a working fork().
So meanwhile, we have spawn() as a replacement. exec() still exists, though.
2022-10-16 18:48:35 +02:00
6d821d2638
libc: Add support for mkdir()
2022-10-16 17:37:29 +02:00
d30010d524
apps/sym: Read from the end of the file
2022-10-15 17:45:53 +02:00
45afd3e243
Replace the rand() which reads from /dev/random with a Mersenne PRNG.
...
Much better now.
Also, it is seeded by reading from /dev/random at startup. Not sure if that's the best idea, but we'll see.
2022-10-15 16:46:54 +02:00
1e86acd4c0
libc: Implement fcntl(F_DUPFD) and dup()
2022-10-15 11:16:34 +02:00
91d76a2ee4
Devices: Add a new RandomDevice :)
...
This new device uses the seeded Mersenne PRNG we use in the kernel.
This device is not meant for regular userspace use, but more for userspace to seed their own PRNGs from.
If the DeviceFS is mounted at /dev, this device can be found at /dev/random.
2022-10-14 20:14:49 +02:00
97461c7c1f
Prepare for moon 0.11
2022-10-14 19:49:52 +02:00
26211bd49f
It (almost) works now
...
The only thing doing weird stuff is exec(), so that's commented out and throws ENOSYS right now.
But we have two user tasks running in parallel, isolated from each other!
2022-10-14 16:46:00 +02:00
531b2848ac
init: Execute /bin/sym instead of /sys/config
...
We have now proven that exec() does fail and return to userspace when a file is not a valid executable.
We can now go back to executing a normal program.
2022-10-12 20:54:32 +02:00
4091799701
Kernel, libc: Add ENOEXEC (Exec format error)
2022-10-12 19:15:44 +02:00
7a2e313a20
init: demo execv()
2022-10-12 18:04:27 +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
eb03ae91e0
Devices: Add a new Serial device
...
This device permits userspace to interface with the serial port.
2022-10-12 10:44:30 +02:00
44834b8a0f
libc: Implement fputs, fputc, putc and putchar
2022-10-12 10:05:14 +02:00
e145690db8
apps: Remove demo programs (except for init)
...
We no longer need those, and they just make the initrd larger.
2022-10-11 21:37:27 +02:00
f6e783ea45
init: do not show 'read n bytes' when printing version
...
that was to debug why reading /dev/version returned 'versionmoon 0.10-' instead of 'moon 0.10-fffffff'
it works now, so...
2022-10-11 20:13:00 +02:00
8e57df518f
apps: build with optimizations enabled
2022-10-11 19:57:24 +02:00
0a7d4a530d
VFS, DeviceFS: Implement a device filesystem
...
For now, we just have a version device. (this will allow us to get rid of sys_getversion!!)
More should be implemented soon.
2022-10-11 19:21:16 +02:00
7a097f16ea
apps: add a new example app which does all kinds of stdio misbehaving >.<
2022-10-11 17:31:06 +02:00
6c51477197
libc: Implement ferror() and feof()
2022-10-11 16:57:08 +02:00
d25e8a43db
build system: strip apps
2022-10-10 21:24:21 +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
40099feb80
Apps: Use the new %p in printf()
2022-10-08 18:11:41 +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
e76d903642
apps: make memeater use perror
2022-10-08 12:42:46 +02:00
21e8ea1486
apps: make memeater use strerror()
2022-10-08 12:29:19 +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
5d8b825659
Add a few example apps/demos in C, and make the kernel choose a random one to demonstrate every boot
2022-10-03 21:24:38 +02:00
34aa953dbc
Add printf() and puts(), quite primitive, looks like hex printing isn't there yet...
2022-10-03 19:00:10 +02:00
dae2ff8d50
Add mmap and munmap syscalls, and thus, add malloc and free to libc!! (yet again, thanks to the wonderful liballoc)
2022-10-02 20:45:04 +02:00
1ecd24f5d6
Kernel: Add SSE support (enable SSE on boot and save context (user tasks only) on task switch)
2022-10-02 18:53:54 +02:00
d2f9e17c86
Use __luna_abort in init
2022-10-02 18:16:27 +02:00
ae95a528f2
Make function stubs in libc loudly abort instead of silently failing
2022-10-02 18:10:53 +02:00