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