Commit Graph

1912 Commits

Author SHA1 Message Date
Bananymous 12474addda Kernel: Make Inodes use the new lock
Also remove old lock from TTY since it can just use the one Inode
already has.
2023-12-07 13:19:12 +02:00
Bananymous 7c25e4ce5a Kernel: Implement RecursivePrioritySpinLock
This locks won't allow locking from userspace thread if there is
kernel thread waiting to lock this.
2023-12-07 13:18:21 +02:00
Bananymous 669d55707e AOC2023: Use quick sort in solution 2023-12-07 11:55:28 +02:00
Bananymous 6caa9b6f95 BAN: implement quick sort and test for it 2023-12-07 11:55:28 +02:00
Bananymous 59ad639fa8 BAN: Fix simple iterator operator--() 2023-12-07 11:55:28 +02:00
Bananymous 43458cc74f BAN: implement exchange sort and test for it 2023-12-07 11:55:28 +02:00
Bananymous e935a33a4d BAN: add value_type to iterators 2023-12-07 10:15:18 +02:00
Bananymous 536bb74d53 AOC2023: optimize hand score calculation 2023-12-07 09:26:17 +02:00
Bananymous a872efdef2 BAN: implement basic swap
This will be improved, currently just works on general type T and
moves values between arguments.
2023-12-07 09:26:17 +02:00
Bananymous efd8be8207 AOC2023: implement day7 2023-12-07 07:56:56 +02:00
Bananymous 06a84da844 Userspace: Implement barebones sudo
This doesn't do any password checking or anything. Just sets uid and
gid before execvp()
2023-12-06 18:15:42 +02:00
Bananymous 24b71d1170 Kernel: Appreciate setuid and setgid bits executables 2023-12-06 18:14:27 +02:00
Bananymous 0dc168a8c0 LibC: Implement basic execvp 2023-12-06 18:14:00 +02:00
Bananymous 76049b2e13 LibC: Implement and fix some string.h functions 2023-12-06 18:13:34 +02:00
Bananymous 393ac33e3c Kernel: Make sys_nanosleep interruptable by signals 2023-12-06 16:22:24 +02:00
Bananymous deeb6d2756 Kernel: Cleanup sys_sleep() and TTY::read_impl 2023-12-06 16:21:22 +02:00
Bananymous 1ac831d4b1 Kernel: Add API to block on semaphore until unblock or EINTR 2023-12-06 16:13:07 +02:00
Bananymous 534969df32 Kernel: Scheduler::unblock_thread() wakes sleeping threads 2023-12-06 16:12:37 +02:00
Bananymous 976ae64f88 LibC: make sleep() set errno if sleep woke up early 2023-12-06 13:13:43 +02:00
Bananymous a12ffaa8a2 Kernel: Make sleep syscall interruptable 2023-12-06 13:13:37 +02:00
Bananymous ff8b3be8dc Userspace: implement basic sleep command 2023-12-06 13:05:53 +02:00
Bananymous 56008869d6 Shell: Handle keyboard input that was interrupted by signal 2023-12-06 13:04:33 +02:00
Bananymous 1c78671078 Kernel: Rework all signal code
Signal handling code was way too complex. Now everything is
simplified and there is no need for ThreadBlockers.

Only complication that this patch includes is that blocking syscalls
have to manually be made interruptable by signal. There might be some
clever solution to combat this is make this happen automatically.
2023-12-06 13:02:17 +02:00
Bananymous cdcc36efde Kernel: Remove unnecessary raise syscall 2023-12-06 13:00:45 +02:00
Bananymous 336daa2cc5 Kernel: Add helper for checking whether segment is from userspace 2023-12-06 12:57:13 +02:00
Bananymous 531211e09d AOC2023: implement day6 2023-12-06 07:27:25 +02:00
Bananymous 894065a67e LibC: cleanup and fix fgets
My quick fix for fgets wrote non-nullterminated newline if size was
one.

POSIX doesn't specify what happens if size == 0, so I do the same as
glibc and return NULL without setting errno.
2023-12-05 10:00:43 +02:00
Bananymous 82cb2ea20b AOC2023: implement day5 2023-12-05 09:13:13 +02:00
Bananymous 95fc894303 LibC: fix fgets when reading empty line 2023-12-05 07:46:14 +02:00
Bananymous 622007f2ee Shell: Verify that command exists before executing it
This prevents page fault somewhere when executing non-existing
commands.
2023-12-04 22:57:27 +02:00
Bananymous cf76d2e7d9 AOC2023: remove unnecessary loop 2023-12-04 17:54:10 +02:00
Bananymous 41f8974080 AOC2023: implement day4 2023-12-04 17:51:27 +02:00
Bananymous 3ed25425a3 AOC2023: implement day3
Solution to second puzzle is not optimal, it definately should be
O(1) space, but I didn't want to think about it.
2023-12-03 17:07:09 +02:00
Bananymous 49f8c4268f AOC2023: implement day2 2023-12-02 16:10:37 +02:00
Bananymous 70c224d8ea AOC2023: Cleanup day1 code 2023-12-01 13:31:55 +02:00
Bananymous 6a7335e5c9 AOC2023: implement day1 2023-12-01 12:38:01 +02:00
Bananymous 3aaa755c51 AOC2023: update buildsystem 2023-12-01 12:38:01 +02:00
Bananymous c140dd2a65 Kernel: Fix keyboard layout for underscore 2023-12-01 12:31:16 +02:00
Bananymous dabd79afa7 Userspace: Prepare aoc2023 environment :) 2023-12-01 01:22:53 +02:00
Bananymous 6ccb1bbbf9 init: set default termios on every username prompt
Before if e.g. Shell crashed init would have broken termios
2023-12-01 01:22:53 +02:00
Bananymous 9b841cb823 BuildSystem/Kernel: Enable -Wextra and -Werror in kernel
Only needed to fix some unused variable bugs
2023-12-01 01:22:53 +02:00
Bananymous c1cac43f28 BuildSystem: Don't build lai with -Wstack-usage
Lai has two functions that trigger warnings on gcc. There isn't
really anything I can do about it, so just disable the warning
2023-12-01 01:22:53 +02:00
Bananymous 8564b59e14 image: Remove inheritance from Netbpm
This inheritance made no sense
2023-11-29 20:56:05 +02:00
Bananymous fdb6dc94ba Kernel: cast between inheritance with static_cast
using reinterpret_cast is not a good idea. preferably we would use
dynamic_cast, but that is not possible since kernel is compiled with
-fno-rtti.
2023-11-29 20:50:57 +02:00
Bananymous 327b330338 Kernel: Make internal framebuffer bpp constexpr defined in libc 2023-11-29 20:07:33 +02:00
Bananymous 7090388c70 cp: allow copying all files except directories
The old condition seemed odd. This allows taking screen shots by
copying the /dev/fb0.
2023-11-29 16:13:40 +02:00
Bananymous ff550785a7 Userspace: Implement basic image rendering for Netbpm
You can now render Netbpm (P6) format image to framebuffer using
`image` command. I added basic test image to
/usr/share/images/sample.ppm
2023-11-29 16:11:35 +02:00
Bananymous d7a3aca5d4 Kernel: Use the correct bpp when writing to framebuffer 2023-11-29 00:31:24 +02:00
Bananymous 056586486d Shell: make clear use \e[2J instead of \e[J
This makes kernel to actually clear the full screen. If framebuffer
did not fit font exactly last row would be left partially uncleared
2023-11-28 23:55:37 +02:00
Bananymous 42a1d26d5b Userspace: Implement basic test for framebuffer mmap 2023-11-28 23:52:22 +02:00