hachem.wtf
aboutsummaryrefslogtreecommitdiff
path: root/user/user.h
diff options
context:
space:
mode:
authorhachem <im@hachem.wtf>2026-10-04 16:03:42 +0200
committerhachem <im@hachem.wtf>2026-10-04 16:03:42 +0200
commit52dab7fc85d877e80e3032f0afabae906adebad8 (patch)
treeb6d56299b839413bb77b1b8c8fa9f7a682124a05 /user/user.h
parenta8a35a00a3c3c57cfbef2311d0348376c2e83208 (diff)
feat: fs tree and free list alloc
Diffstat (limited to 'user/user.h')
-rw-r--r--user/user.h17
1 files changed, 16 insertions, 1 deletions
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);
}