Commit Graph

165 Commits

Author SHA1 Message Date
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