From 5cf552fd142338b5392d5410f6a9c94212199b03 Mon Sep 17 00:00:00 2001 From: boreddevnl Date: Sun, 1 Mar 2026 17:10:41 +0100 Subject: [PATCH] Disk improvements --- boredos.iso | Bin 4446208 -> 4452352 bytes build/fat32.o | Bin 158712 -> 156960 bytes build/main.o | Bin 31328 -> 31328 bytes disk.img | Bin 67108864 -> 67108864 bytes src/kernel/fat32.c | 355 ++++++++++++++++++++++------- src/kernel/syscall.c | 6 + src/kernel/syscall.h | 1 + src/kernel/userland/cp.c | 166 ++++++++++++-- src/kernel/userland/libc/syscall.c | 4 + src/kernel/userland/libc/syscall.h | 2 + src/kernel/userland/ls.c | 18 ++ src/kernel/userland/mv.c | 132 +++++++++-- 12 files changed, 558 insertions(+), 126 deletions(-) diff --git a/boredos.iso b/boredos.iso index 0ac7c54182601f175ec584dd28f4bb1ebb3d7525..090b1508174ed76c7ceab36924fba59cdf306c94 100644 GIT binary patch delta 359743 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