diff options
| author | hachem <im@hachem.wtf> | 2026-10-04 16:03:42 +0200 |
|---|---|---|
| committer | hachem <im@hachem.wtf> | 2026-10-04 16:03:42 +0200 |
| commit | 52dab7fc85d877e80e3032f0afabae906adebad8 (patch) | |
| tree | b6d56299b839413bb77b1b8c8fa9f7a682124a05 /user/user.h | |
| parent | a8a35a00a3c3c57cfbef2311d0348376c2e83208 (diff) | |
feat: fs tree and free list alloc
Diffstat (limited to 'user/user.h')
| -rw-r--r-- | user/user.h | 17 |
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); } |
