From 52dab7fc85d877e80e3032f0afabae906adebad8 Mon Sep 17 00:00:00 2001 From: hachem Date: Sun, 4 Oct 2026 16:03:42 +0200 Subject: feat: fs tree and free list alloc --- user/user.h | 17 ++++++++++++++++- 1 file changed, 16 insertions(+), 1 deletion(-) (limited to 'user/user.h') diff --git a/user/user.h b/user/user.h index 676326b..635dc86 100644 --- a/user/user.h +++ b/user/user.h @@ -1,4 +1,4 @@ -// shared syscall stubs + tiny helpers for revel ring 3 programs +// shared syscall stubs static long sys_write(const char* buffer, unsigned long length) { @@ -37,6 +37,16 @@ static long sys_fs_read(const char* name, unsigned long offset, char* buffer, un return result; } +static long sys_fs_write(const char* name, const char* buffer, unsigned long length) +{ + long result; + __asm__ volatile("int $0x80" + : "=a"(result) + : "a"(6L), "D"(name), "S"(buffer), "d"(length) + : "memory"); + return result; +} + static void put(const char* string) { unsigned long length = 0; @@ -78,20 +88,25 @@ static void put_int(long value) int length = 0; int negative = value < 0; unsigned long magnitude = negative ? (unsigned long)(-value) : (unsigned long)value; + if (magnitude == 0) buffer[length++] = '0'; + while (magnitude > 0) { buffer[length++] = (char)('0' + magnitude % 10); magnitude /= 10; } + if (negative) buffer[length++] = '-'; + for (int left = 0, right = length - 1; left < right; left++, right--) { char swap = buffer[left]; buffer[left] = buffer[right]; buffer[right] = swap; } + sys_write(buffer, length); } -- cgit v1.3