summaryrefslogtreecommitdiff
path: root/src/ulib
diff options
context:
space:
mode:
authorRichard Qin <richard.qin.x@gmail.com>2026-07-10 11:31:46 +0800
committerRichard Qin <richard.qin.x@gmail.com>2026-07-10 11:31:46 +0800
commite90b72ec3082588b296956730bd2930cf8d5d671 (patch)
tree36ff6916af9b4176ea5a9662219d11e721f0b691 /src/ulib
parent1767d390fbf3d0c65389de46caf0b6d43ef3b6ad (diff)
downloadlume-e90b72ec3082588b296956730bd2930cf8d5d671.tar.gz
lume-e90b72ec3082588b296956730bd2930cf8d5d671.tar.xz
refactor: promote new architecture to repository root
Archive the deprecated implementation under lume-legacy, make the new kernel the default root-level build, and update repository entry points without changing kernel behavior.
Diffstat (limited to 'src/ulib')
-rw-r--r--src/ulib/assert.c12
-rw-r--r--src/ulib/cxx.cc35
-rw-r--r--src/ulib/iostream.cpp12
-rw-r--r--src/ulib/stdio.c1056
-rw-r--r--src/ulib/stdlib.c543
-rw-r--r--src/ulib/string.c335
-rw-r--r--src/ulib/syscalls.c153
7 files changed, 0 insertions, 2146 deletions
diff --git a/src/ulib/assert.c b/src/ulib/assert.c
deleted file mode 100644
index c60643a..0000000
--- a/src/ulib/assert.c
+++ /dev/null
@@ -1,12 +0,0 @@
-// SPDX-License-Identifier: GPL-2.0-or-later
-/*
- * Copyright (C) 2026 Richard QIn
- */
-#include "stdio.h"
-#include "stdlib.h"
-
-void __assert_fail(const char *expr, const char *file, int line, const char *func)
-{
- fprintf(stderr, "Assertion failed: %s (%s: %s: %d)\n", expr, file, func, line);
- abort();
-} \ No newline at end of file
diff --git a/src/ulib/cxx.cc b/src/ulib/cxx.cc
deleted file mode 100644
index d8f510d..0000000
--- a/src/ulib/cxx.cc
+++ /dev/null
@@ -1,35 +0,0 @@
-// SPDX-License-Identifier: GPL-2.0-or-later
-/*
- * Copyright (C) 2026 Richard QIn
- */
-#include "ulib/stdlib.h"
-
-void *operator new(unsigned long n)
-{
- return malloc(n);
-}
-
-void *operator new[](unsigned long n)
-{
- return malloc(n);
-}
-
-void operator delete(void *p)
-{
- free(p);
-}
-
-void operator delete[](void *p)
-{
- free(p);
-}
-
-void operator delete(void *p, unsigned long)
-{
- free(p);
-}
-
-void operator delete[](void *p, unsigned long)
-{
- free(p);
-} \ No newline at end of file
diff --git a/src/ulib/iostream.cpp b/src/ulib/iostream.cpp
deleted file mode 100644
index 4d721c1..0000000
--- a/src/ulib/iostream.cpp
+++ /dev/null
@@ -1,12 +0,0 @@
-// SPDX-License-Identifier: GPL-2.0-or-later
-/*
- * Copyright (C) 2026 Richard QIn
- */
-#include "ulib/iostream"
-
-namespace std
-{
- istream cin(stdin);
- ostream cout(stdout);
- ostream cerr(stderr);
-} // namespace std
diff --git a/src/ulib/stdio.c b/src/ulib/stdio.c
deleted file mode 100644
index e81f69a..0000000
--- a/src/ulib/stdio.c
+++ /dev/null
@@ -1,1056 +0,0 @@
-// SPDX-License-Identifier: GPL-2.0-or-later
-/*
- * Copyright (C) 2026 Richard QIn
- */
-#include "ulib/stdio.h"
-#include "ulib/string.h"
-#include "ulib/stdlib.h"
-
-/* Include STB Sprintf Implementation */
-#define STB_SPRINTF_IMPLEMENTATION
-#include "ulib/stb_sprintf.h"
-
-const int STDIN_FD = 0;
-const int STDOUT_FD = 1;
-const int STDERR_FD = 2;
-
-
-
-extern int open(const char *path, int flags);
-extern int close(int fd);
-extern int read(int fd, void *buf, uint64 count);
-extern int write(int fd, const void *buf, uint64 count);
-extern int lseek(int fd, int offset, int whence);
-
-static int isspace(int c)
-{
- return c == ' ' || c == '\t' || c == '\n' || c == '\v' || c == '\f' || c == '\r';
-}
-
-/* Core Formatting Implementation */
-
-static int _ul_to_str_invert(char *buf, uint64 val, int base, int uppercase)
-{
- int i = 0;
- const char *digits = uppercase ? "0123456789ABCDEF" : "0123456789abcdef";
- if (val == 0)
- {
- buf[i++] = '0';
- return i;
- }
- while (val != 0)
- {
- buf[i++] = digits[val % base];
- val /= base;
- }
- return i;
-}
-
-typedef struct
-{
- char *buf;
- uint64 limit;
- uint64 written;
- FILE *stream;
-} _OutContext;
-
-static void _out_char(_OutContext *ctx, char c)
-{
- if (ctx->stream)
- {
- fputc(c, ctx->stream);
- ctx->written++;
- }
- else
- {
- if (ctx->limit > 0 && ctx->written < ctx->limit - 1)
- {
- ctx->buf[ctx->written] = c;
- }
- ctx->written++;
- }
-}
-
-static int _vprintf_core(_OutContext *ctx, const char *format, va_list ap)
-{
- const char *p = format;
- char num_buf[32];
-
- while (*p)
- {
- if (*p != '%')
- {
- _out_char(ctx, *p++);
- continue;
- }
- p++;
-
- int flag_left = 0, flag_zero = 0, flag_plus = 0, flag_space = 0, flag_hash = 0;
- while (1)
- {
- if (*p == '-')
- flag_left = 1;
- else if (*p == '0')
- flag_zero = 1;
- else if (*p == '+')
- flag_plus = 1;
- else if (*p == ' ')
- flag_space = 1;
- else if (*p == '#')
- flag_hash = 1;
- else
- break;
- p++;
- }
-
- int width = 0;
- if (*p == '*')
- {
- width = va_arg(ap, int);
- if (width < 0)
- {
- flag_left = 1;
- width = -width;
- }
- p++;
- }
- else
- {
- while (*p >= '0' && *p <= '9')
- {
- width = width * 10 + (*p - '0');
- p++;
- }
- }
-
- int precision = -1;
- if (*p == '.')
- {
- p++;
- if (*p == '*')
- {
- precision = va_arg(ap, int);
- p++;
- }
- else
- {
- precision = 0;
- while (*p >= '0' && *p <= '9')
- {
- precision = precision * 10 + (*p - '0');
- p++;
- }
- }
- }
-
- int len_mod = 0;
- if (*p == 'l')
- {
- len_mod = 1;
- p++;
- if (*p == 'l')
- {
- len_mod = 2;
- p++;
- }
- }
- else if (*p == 'z')
- {
- len_mod = 2;
- p++;
- }
-
- char spec = *p++;
- if (!spec)
- break;
-
- if (spec == 'd' || spec == 'i' || spec == 'u' || spec == 'x' || spec == 'X' || spec == 'p')
- {
- uint64 val;
- int is_signed = (spec == 'd' || spec == 'i');
- int base = (spec == 'x' || spec == 'X' || spec == 'p') ? 16 : 10;
-
- if (spec == 'p')
- val = (uint64)va_arg(ap, void *);
- else if (len_mod == 2)
- val = is_signed ? (uint64)va_arg(ap, int64) : va_arg(ap, uint64);
- else if (len_mod == 1)
- val = is_signed ? (uint64)va_arg(ap, long) : (uint64)va_arg(ap, unsigned long);
- else
- val = is_signed ? (uint64)((int64)va_arg(ap, int)) : (uint64)va_arg(ap, uint32);
-
- char sign_char = 0;
- if (is_signed)
- {
- int64 sval = (int64)val;
- if (sval < 0)
- {
- sign_char = '-';
- val = (uint64)(-sval);
- }
- else if (flag_plus)
- sign_char = '+';
- else if (flag_space)
- sign_char = ' ';
- }
-
- int digit_len = _ul_to_str_invert(num_buf, val, base, (spec == 'X'));
- if (precision >= 0)
- flag_zero = 0;
- int prec_zeros = (precision > digit_len) ? precision - digit_len : 0;
- if (precision == 0 && val == 0)
- digit_len = 0;
-
- int prefix_len = sign_char ? 1 : 0;
- char *prefix_str = NULL;
- if (spec == 'p' || (flag_hash && val != 0 && (spec == 'x' || spec == 'X')))
- {
- prefix_str = (spec == 'X') ? "0X" : "0x";
- prefix_len += 2;
- }
-
- int padding = (width > prefix_len + prec_zeros + digit_len) ? width - (prefix_len + prec_zeros + digit_len) : 0;
-
- if (!flag_left && !flag_zero)
- for (int i = 0; i < padding; i++)
- _out_char(ctx, ' ');
- if (sign_char)
- _out_char(ctx, sign_char);
- if (prefix_str)
- {
- _out_char(ctx, prefix_str[0]);
- _out_char(ctx, prefix_str[1]);
- }
- int total_zeros = prec_zeros + ((flag_zero && !flag_left) ? padding : 0);
- for (int i = 0; i < total_zeros; i++)
- _out_char(ctx, '0');
- for (int i = digit_len - 1; i >= 0; i--)
- _out_char(ctx, num_buf[i]);
- if (flag_left)
- for (int i = 0; i < padding; i++)
- _out_char(ctx, ' ');
- }
- else if (spec == 'f' || spec == 'F' || spec == 'e' || spec == 'E' || spec == 'g' || spec == 'G')
- {
- char fmt_tmp[32];
- int f_idx = 0;
- fmt_tmp[f_idx++] = '%';
- if (flag_left)
- fmt_tmp[f_idx++] = '-';
- if (flag_zero)
- fmt_tmp[f_idx++] = '0';
- if (flag_plus)
- fmt_tmp[f_idx++] = '+';
- if (flag_space)
- fmt_tmp[f_idx++] = ' ';
- if (flag_hash)
- fmt_tmp[f_idx++] = '#';
- if (width > 0)
- f_idx += sprintf(&fmt_tmp[f_idx], "%d", width);
- if (precision >= 0)
- f_idx += sprintf(&fmt_tmp[f_idx], ".%d", precision);
- fmt_tmp[f_idx++] = spec;
- fmt_tmp[f_idx] = '\0';
- double f_val = va_arg(ap, double);
- char f_buf[128];
- stbsp_snprintf(f_buf, sizeof(f_buf), fmt_tmp, f_val);
- for (int i = 0; f_buf[i] != '\0'; i++)
- _out_char(ctx, f_buf[i]);
- }
- else if (spec == 's')
- {
- const char *s = va_arg(ap, char *);
- if (!s)
- s = "(null)";
- int len = 0;
- const char *tmp = s;
- while (*tmp && (precision < 0 || len < precision))
- {
- tmp++;
- len++;
- }
- int padding = (width > len) ? width - len : 0;
- if (!flag_left)
- for (int i = 0; i < padding; i++)
- _out_char(ctx, ' ');
- for (int i = 0; i < len; i++)
- _out_char(ctx, s[i]);
- if (flag_left)
- for (int i = 0; i < padding; i++)
- _out_char(ctx, ' ');
- }
- else if (spec == 'c')
- {
- char c = (char)va_arg(ap, int);
- int padding = (width > 1) ? width - 1 : 0;
- if (!flag_left)
- for (int i = 0; i < padding; i++)
- _out_char(ctx, ' ');
- _out_char(ctx, c);
- if (flag_left)
- for (int i = 0; i < padding; i++)
- _out_char(ctx, ' ');
- }
- else
- {
- _out_char(ctx, '%');
- if (spec != '%')
- _out_char(ctx, spec);
- }
- }
- return (int)ctx->written;
-}
-
-int vsnprintf(char *str, uint64 size, const char *format, va_list ap)
-{
- _OutContext ctx;
- ctx.buf = str;
- ctx.limit = size;
- ctx.written = 0;
- ctx.stream = NULL;
- _vprintf_core(&ctx, format, ap);
- if (size > 0)
- {
- if (ctx.written < size)
- str[ctx.written] = '\0';
- else
- str[size - 1] = '\0';
- }
- return (int)ctx.written;
-}
-int snprintf(char *str, uint64 size, const char *format, ...)
-{
- va_list ap;
- va_start(ap, format);
- int ret = vsnprintf(str, size, format, ap);
- va_end(ap);
- return ret;
-}
-int sprintf(char *str, const char *format, ...)
-{
- va_list ap;
- va_start(ap, format);
- int ret = vsnprintf(str, (uint64)-1, format, ap);
- va_end(ap);
- return ret;
-}
-int printf(const char *format, ...)
-{
- va_list ap;
- va_start(ap, format);
- _OutContext ctx;
- ctx.buf = NULL;
- ctx.limit = 0;
- ctx.written = 0;
- ctx.stream = stdout;
- _vprintf_core(&ctx, format, ap);
- va_end(ap);
- return (int)ctx.written;
-}
-
-/* Core Function Implementation */
-
-typedef struct
-{
- const char *buf;
- int fd;
- uint64 pos;
- int ungotten;
-} _InContext;
-
-static int _in_char(_InContext *ctx)
-{
- if (ctx->ungotten >= 0)
- {
- int c = ctx->ungotten;
- ctx->ungotten = -1;
- return c;
- }
- if (ctx->fd == -1)
- {
- if (ctx->buf[ctx->pos] == '\0')
- return -1;
- return (unsigned char)ctx->buf[ctx->pos++];
- }
- char c;
- if (read(ctx->fd, &c, 1) == 1)
- return (unsigned char)c;
- return -1;
-}
-
-static void _unget_char(_InContext *ctx, int c)
-{
- if (c != -1)
- ctx->ungotten = c;
-}
-static void _skip_space(_InContext *ctx)
-{
- int c;
- while ((c = _in_char(ctx)) != -1)
- {
- if (!isspace(c))
- {
- _unget_char(ctx, c);
- break;
- }
- }
-}
-
-static double _simple_strtod(const char *str, char **endptr)
-{
- double val = 0.0;
- int sign = 1;
- if (*str == '-')
- {
- sign = -1;
- str++;
- }
- else if (*str == '+')
- str++;
- while (*str >= '0' && *str <= '9')
- {
- val = val * 10.0 + (*str - '0');
- str++;
- }
- if (*str == '.')
- {
- str++;
- double div = 10.0;
- while (*str >= '0' && *str <= '9')
- {
- val += (*str - '0') / div;
- div *= 10.0;
- str++;
- }
- }
- if (*str == 'e' || *str == 'E')
- {
- str++;
- int esign = 1;
- if (*str == '-')
- {
- esign = -1;
- str++;
- }
- else if (*str == '+')
- str++;
- int eval = 0;
- while (*str >= '0' && *str <= '9')
- {
- eval = eval * 10 + (*str - '0');
- str++;
- }
- double p = 1.0;
- while (eval--)
- p *= 10.0;
- if (esign == 1)
- val *= p;
- else
- val /= p;
- }
- if (endptr)
- *endptr = (char *)str;
- return sign * val;
-}
-
-static int _vscanf_core(_InContext *ctx, const char *format, va_list ap)
-{
- int assigned = 0;
- const char *p = format;
- while (*p)
- {
- if (isspace(*p))
- {
- _skip_space(ctx);
- while (isspace(*p))
- p++;
- continue;
- }
- if (*p != '%')
- {
- _skip_space(ctx);
- int c = _in_char(ctx);
- if (c != *p)
- {
- _unget_char(ctx, c);
- return assigned;
- }
- p++;
- continue;
- }
- p++;
- int suppress = 0;
- if (*p == '*')
- {
- suppress = 1;
- p++;
- }
- int width = -1;
- while (*p >= '0' && *p <= '9')
- {
- if (width == -1)
- width = 0;
- width = width * 10 + (*p - '0');
- p++;
- }
- int len_mod = 0;
- if (*p == 'l')
- {
- len_mod = 1;
- p++;
- if (*p == 'l')
- {
- len_mod = 2;
- p++;
- }
- }
- else if (*p == 'h')
- {
- p++;
- if (*p == 'h')
- p++;
- }
- char spec = *p++;
- if (!spec)
- break;
-
- if (spec == 'd' || spec == 'i' || spec == 'u' || spec == 'x')
- {
- _skip_space(ctx);
- char num_buf[64];
- int i = 0, c = _in_char(ctx);
- if (c == '-' || c == '+')
- {
- num_buf[i++] = (char)c;
- c = _in_char(ctx);
- }
- int base = (spec == 'x') ? 16 : (spec == 'i' ? 0 : 10);
- while (c != -1 && i < 63)
- {
- int digit = (c >= '0' && c <= '9');
- int hex = (base == 16 || base == 0) && ((c >= 'a' && c <= 'f') || (c >= 'A' && c <= 'F'));
- int x = (c == 'x' || c == 'X');
- if (base == 0 && i == 1 && num_buf[0] == '0' && x)
- base = 16;
- if (width > 0 && i >= width)
- break;
- if (digit || hex || x)
- {
- num_buf[i++] = (char)c;
- c = _in_char(ctx);
- }
- else
- break;
- }
- num_buf[i] = '\0';
- _unget_char(ctx, c);
- if (i == 0)
- return assigned;
- if (!suppress)
- {
- int64 val = strtoll(num_buf, NULL, base);
- if (len_mod == 2)
- *va_arg(ap, int64 *) = val;
- else if (len_mod == 1)
- *va_arg(ap, long *) = (long)val;
- else
- *va_arg(ap, int *) = (int)val;
- assigned++;
- }
- }
- else if (spec == 'f' || spec == 'F' || spec == 'e' || spec == 'E' || spec == 'g' || spec == 'G')
- {
- _skip_space(ctx);
- char num_buf[64];
- int i = 0, c = _in_char(ctx);
- if (c == '-' || c == '+')
- {
- num_buf[i++] = (char)c;
- c = _in_char(ctx);
- }
- while (c != -1 && i < 63)
- {
- if ((c >= '0' && c <= '9') || c == '.' || c == 'e' || c == 'E' || c == '+' || c == '-')
- {
- num_buf[i++] = (char)c;
- c = _in_char(ctx);
- }
- else
- break;
- }
- num_buf[i] = '\0';
- _unget_char(ctx, c);
- if (i == 0)
- return assigned;
- if (!suppress)
- {
- double val = _simple_strtod(num_buf, NULL);
- if (len_mod == 1)
- *va_arg(ap, double *) = val;
- else
- *va_arg(ap, float *) = (float)val;
- assigned++;
- }
- }
- else if (spec == 's')
- {
- _skip_space(ctx);
- char *buf = suppress ? NULL : va_arg(ap, char *);
- int i = 0, c = _in_char(ctx);
- while (c != -1 && !isspace(c))
- {
- if (width > 0 && i >= width)
- break;
- if (!suppress)
- buf[i] = (char)c;
- i++;
- c = _in_char(ctx);
- }
- if (!suppress)
- buf[i] = '\0';
- _unget_char(ctx, c);
- if (i > 0 && !suppress)
- assigned++;
- }
- else if (spec == 'c')
- {
- int count = (width > 0) ? width : 1;
- char *buf = suppress ? NULL : va_arg(ap, char *);
- for (int i = 0; i < count; i++)
- {
- int c = _in_char(ctx);
- if (c == -1)
- return assigned;
- if (!suppress)
- buf[i] = (char)c;
- }
- if (!suppress)
- assigned++;
- }
- }
- return assigned;
-}
-
-int sscanf(const char *str, const char *format, ...)
-{
- va_list ap;
- va_start(ap, format);
- _InContext ctx;
- ctx.buf = str;
- ctx.fd = -1;
- ctx.pos = 0;
- ctx.ungotten = -1;
- int ret = _vscanf_core(&ctx, format, ap);
- va_end(ap);
- return ret;
-}
-int scanf(const char *format, ...)
-{
- va_list ap;
- va_start(ap, format);
- _InContext ctx;
- ctx.buf = NULL;
- ctx.fd = STDIN_FD;
- ctx.pos = 0;
- ctx.ungotten = -1;
- int ret = _vscanf_core(&ctx, format, ap);
- va_end(ap);
- return ret;
-}
-
-/* FILE Stream Implementation */
-
-#define O_RDONLY 00
-#define O_WRONLY 01
-#define O_RDWR 02
-#define O_CREAT 0100
-#define O_TRUNC 01000
-#define O_APPEND 02000
-
-
-static FILE _stdin = {.fd = 0, .buf_mode = 1};
-static FILE _stdout = {.fd = 1, .buf_mode = 1};
-static FILE _stderr = {.fd = 2, .buf_mode = 2};
-
-FILE *stdin = &_stdin;
-FILE *stdout = &_stdout;
-FILE *stderr = &_stderr;
-
-FILE *fopen(const char *filename, const char *mode)
-{
- int flags = 0;
- if (strcmp(mode, "r") == 0)
- flags = O_RDONLY;
- else if (strcmp(mode, "w") == 0)
- flags = O_WRONLY | O_CREAT | O_TRUNC;
- else if (strcmp(mode, "a") == 0)
- flags = O_WRONLY | O_CREAT | O_APPEND;
- else if (strcmp(mode, "r+") == 0)
- flags = O_RDWR;
- else
- return NULL;
-
- int64 fd = open(filename, flags);
- if (fd < 0)
- return NULL;
-
- FILE *f = (FILE *)malloc(sizeof(FILE));
- if (!f)
- {
- close(fd);
- return NULL;
- }
-
- memset(f, 0, sizeof(FILE));
- f->fd = (int)fd;
- f->flags = flags;
-
- if (fd == 1)
- f->buf_mode = 1;
- else if (fd == 2)
- f->buf_mode = 2;
- else
- f->buf_mode = 0;
- return f;
-}
-
-int fclose(FILE *stream)
-{
- if (!stream)
- return -1;
- fflush(stream);
- if (stream != stdin && stream != stdout && stream != stderr)
- {
- close(stream->fd);
- free(stream);
- }
- return 0;
-}
-
-int fflush(FILE *stream)
-{
- if (!stream)
- return EOF;
-
- if (stream->buf_write_pos > 0)
- {
- int64 ret = write(stream->fd, stream->buffer, stream->buf_write_pos);
- if (ret < stream->buf_write_pos)
- {
- stream->error = 1;
- stream->buf_write_pos = 0;
- return EOF;
- }
- stream->buf_write_pos = 0;
- }
- return 0;
-}
-
-int fprintf(FILE *stream, const char *format, ...)
-{
- if (!stream)
- return -1;
- va_list ap;
- va_start(ap, format);
- _OutContext ctx;
- ctx.buf = NULL;
- ctx.limit = 0;
- ctx.written = 0;
- ctx.stream = stream;
- _vprintf_core(&ctx, format, ap);
- va_end(ap);
- return (int)ctx.written;
-}
-
-int fscanf(FILE *stream, const char *format, ...)
-{
- if (!stream)
- return -1;
- va_list ap;
- va_start(ap, format);
- _InContext ctx;
- ctx.buf = NULL;
- ctx.fd = stream->fd;
- ctx.pos = 0;
- ctx.ungotten = -1;
- int ret = _vscanf_core(&ctx, format, ap);
- va_end(ap);
- return ret;
-}
-
-int fputc(int c, FILE *stream)
-{
- if (!stream)
- return EOF;
- if (stream->buf_mode == 2)
- {
- char ch = (char)c;
- if (write(stream->fd, &ch, 1) != 1)
- {
- stream->error = 1;
- return EOF;
- }
- return c;
- }
-
- stream->buffer[stream->buf_write_pos++] = (char)c;
-
- if (stream->buf_write_pos >= BUFSIZ)
- {
- fflush(stream);
- }
- else if (stream->buf_mode == 1 && c == '\n')
- {
- fflush(stream);
- }
-
- return c;
-}
-
-int fputs(const char *s, FILE *stream)
-{
- if (!stream)
- return -1;
- while (*s)
- {
- if (fputc(*s++, stream) == EOF)
- return EOF;
- }
- return 0;
-}
-
-int fgetc(FILE *stream)
-{
- if (!stream)
- return EOF;
-
- if (stream->buf_write_pos > 0)
- {
- fflush(stream);
- }
-
- if (stream->buf_read_pos < stream->buf_read_cnt)
- {
- return (unsigned char)stream->buffer[stream->buf_read_pos++];
- }
-
- int64 ret = read(stream->fd, stream->buffer, BUFSIZ);
- if (ret <= 0)
- {
- if (ret == 0)
- stream->eof = 1;
- else
- stream->error = 1;
- return EOF;
- }
-
- stream->buf_read_cnt = (int)ret;
- stream->buf_read_pos = 0;
- return (unsigned char)stream->buffer[stream->buf_read_pos++];
-}
-
-char *fgets(char *str, int n, FILE *stream)
-{
- if (!stream || n <= 0)
- return NULL;
- int i = 0, c;
- while (i < n - 1)
- {
- c = fgetc(stream);
- if (c == -1)
- {
- if (i == 0)
- return NULL;
- break;
- }
- str[i++] = (char)c;
- if (c == '\n')
- break;
- }
- str[i] = '\0';
- return str;
-}
-
-uint64 fread(void *ptr, uint64 size, uint64 nmemb, FILE *stream)
-{
- if (!stream || size == 0 || nmemb == 0)
- return 0;
-
- uint64 total_bytes = size * nmemb;
- uint64 bytes_read = 0;
- char *dst = (char *)ptr;
-
- if (stream->buf_write_pos > 0)
- fflush(stream);
-
- while (bytes_read < total_bytes)
- {
- if (stream->buf_read_pos < stream->buf_read_cnt)
- {
- uint64 available = stream->buf_read_cnt - stream->buf_read_pos;
- uint64 remaining = total_bytes - bytes_read;
- uint64 to_copy = (available < remaining) ? available : remaining;
-
- memcpy(dst + bytes_read, stream->buffer + stream->buf_read_pos, to_copy);
-
- stream->buf_read_pos += to_copy;
- bytes_read += to_copy;
- }
- else
- {
- uint64 remaining = total_bytes - bytes_read;
-
- if (remaining >= BUFSIZ)
- {
- int64 ret = read(stream->fd, dst + bytes_read, remaining);
- if (ret <= 0)
- {
- if (ret == 0)
- stream->eof = 1;
- else
- stream->error = 1;
- return bytes_read / size;
- }
- bytes_read += ret;
- }
- else
- {
- stream->buf_read_pos = 0;
- stream->buf_read_cnt = 0;
- int64 ret = read(stream->fd, stream->buffer, BUFSIZ);
-
- if (ret <= 0)
- {
- if (ret == 0)
- stream->eof = 1;
- else
- stream->error = 1;
- return bytes_read / size;
- }
- stream->buf_read_cnt = (int)ret;
- }
- }
- }
- return bytes_read / size;
-}
-
-uint64 fwrite(const void *ptr, uint64 size, uint64 nmemb, FILE *stream)
-{
- if (!stream || !ptr || size == 0 || nmemb == 0)
- return 0;
- uint64 total_bytes = size * nmemb;
- const char *src = (const char *)ptr;
- uint64 bytes_written = 0;
-
- if (stream->buf_mode == 2)
- {
- while (bytes_written < total_bytes)
- {
- int64 ret = write(stream->fd, src + bytes_written, total_bytes - bytes_written);
- if (ret <= 0)
- {
- stream->error = 1;
- break;
- }
- bytes_written += ret;
- }
- return bytes_written / size;
- }
-
- while (bytes_written < total_bytes)
- {
- uint64 space_left = BUFSIZ - stream->buf_write_pos;
- uint64 remaining = total_bytes - bytes_written;
-
- if (remaining <= space_left)
- {
- memcpy(stream->buffer + stream->buf_write_pos, src + bytes_written, remaining);
- stream->buf_write_pos += remaining;
- bytes_written += remaining;
- if (stream->buf_write_pos == BUFSIZ)
- fflush(stream);
- }
- else
- {
- memcpy(stream->buffer + stream->buf_write_pos, src + bytes_written, space_left);
- stream->buf_write_pos += space_left;
- bytes_written += space_left;
- fflush(stream);
- }
- }
-
- return bytes_written / size;
-}
-
-int fseek(FILE *stream, long offset, int whence)
-{
- if (!stream)
- return -1;
-
- if (stream->buf_write_pos > 0)
- {
- fflush(stream);
- }
- stream->buf_read_pos = 0;
- stream->buf_read_cnt = 0;
- stream->eof = 0;
-
- if (lseek(stream->fd, offset, whence) < 0)
- {
- stream->error = 1;
- return -1;
- }
- return 0;
-}
-long ftell(FILE *stream)
-{
- if (!stream)
- return -1L;
- int64 ret = lseek(stream->fd, 0, SEEK_CUR);
- if (ret < 0)
- {
- stream->error = 1;
- return -1L;
- }
- return (long)ret;
-}
-void rewind(FILE *stream)
-{
- if (stream)
- {
- fseek(stream, 0, SEEK_SET);
- stream->error = 0;
- }
-}
-
-int feof(FILE *stream)
-{
- return (stream) ? stream->eof : 1;
-}
-int ferror(FILE *stream)
-{
- return (stream) ? stream->error : 1;
-}
-void clearerr(FILE *stream)
-{
- if (stream)
- {
- stream->error = 0;
- stream->eof = 0;
- }
-}
-
-int ungetc(int c, FILE *stream)
-{
- if (!stream || c == EOF)
- return EOF;
-
- if (stream->buf_read_pos > 0)
- {
- stream->buf_read_pos--;
- stream->buffer[stream->buf_read_pos] = (char)c;
- stream->eof = 0;
- return c;
- }
- return EOF;
-} \ No newline at end of file
diff --git a/src/ulib/stdlib.c b/src/ulib/stdlib.c
deleted file mode 100644
index 8b22b6f..0000000
--- a/src/ulib/stdlib.c
+++ /dev/null
@@ -1,543 +0,0 @@
-// SPDX-License-Identifier: GPL-2.0-or-later
-/*
- * Copyright (C) 2026 Richard QIn
- */
-#include "ulib/stdlib.h"
-#include "ulib/string.h"
-#include "ulib/ctypes.h"
-
-extern int sys_exit(int status);
-extern void *sbrk(long increment);
-
-#undef errno
-int errno = 0;
-
-#define ATEXIT_MAX 32
-static void (*__atexit_funcs[ATEXIT_MAX])(void);
-static int __atexit_func_count = 0;
-
-int atexit(void (*function)(void))
-{
- if (__atexit_func_count >= ATEXIT_MAX)
- return -1;
- __atexit_funcs[__atexit_func_count++] = function;
- return 0;
-}
-
-int exit(int status)
-{
- while (__atexit_func_count > 0)
- {
- (__atexit_funcs[--__atexit_func_count])();
- }
- sys_exit(status);
-
- while (1)
- ;
- return 0;
-}
-
-void abort(void)
-{
- exit(127);
-}
-
-char *getenv(const char *name)
-{
- /* None */
- return NULL;
-}
-
-int system(const char *command)
-{
- /* None */
- return -1;
-}
-
-/* Memory Management */
-#define ALIGNMENT 16
-#define ALIGN(size) (((size) + (ALIGNMENT - 1)) & ~(ALIGNMENT - 1))
-
-typedef struct header
-{
- size_t size;
- struct header *next;
-} header_t;
-
-static header_t base;
-static header_t *freep = NULL;
-
-
-#define LOCK()
-#define UNLOCK()
-
-void free(void *ptr)
-{
- header_t *bp, *p;
-
- if (!ptr)
- return;
-
-
- bp = (header_t *)ptr - 1;
-
- LOCK();
-
-
- for (p = freep; !(bp > p && bp < p->next); p = p->next)
- {
- if (p >= p->next && (bp > p || bp < p->next))
- break;
- }
-
- if ((char *)bp + bp->size == (char *)p->next)
- {
- bp->size += p->next->size;
- bp->next = p->next->next;
- }
- else
- {
- bp->next = p->next;
- }
-
- if ((char *)p + p->size == (char *)bp)
- {
- p->size += bp->size;
- p->next = bp->next;
- }
- else
- {
- p->next = bp;
- }
-
- freep = p;
- UNLOCK();
-}
-
-static header_t *morecore(size_t nu)
-{
- char *cp;
- header_t *up;
-
- if (nu < 4096)
- nu = 4096;
-
- nu = ALIGN(nu);
-
- cp = (char *)sbrk(nu);
- if (cp == (void *)-1)
- return NULL;
-
- up = (header_t *)cp;
- up->size = nu;
-
- free((void *)(up + 1));
- return freep;
-}
-
-void *malloc(size_t size)
-{
- header_t *p, *prevp;
-
- if (size == 0)
- return NULL;
-
- size = ALIGN(size + sizeof(header_t));
-
- LOCK();
-
- if ((prevp = freep) == NULL)
- {
- base.next = freep = prevp = &base;
- base.size = 0;
- }
-
- for (p = prevp->next;; prevp = p, p = p->next)
- {
- if (p->size >= size)
- {
- if (p->size == size)
- {
- prevp->next = p->next;
- }
- else
- {
- p->size -= size;
-
- p = (header_t *)((char *)p + p->size);
-
- p->size = size;
- }
- freep = prevp;
- UNLOCK();
- return (void *)(p + 1);
- }
-
- if (p == freep)
- {
- if ((p = morecore(size)) == NULL)
- {
- UNLOCK();
- errno = ENOMEM;
- return NULL;
- }
- }
- }
-}
-
-void *calloc(size_t nmemb, size_t size)
-{
- size_t total;
- if (__builtin_mul_overflow(nmemb, size, &total))
- {
- errno = ENOMEM;
- return NULL;
- }
- void *p = malloc(total);
- if (p)
- memset(p, 0, total);
- return p;
-}
-
-void *realloc(void *ptr, size_t size)
-{
- if (!ptr)
- return malloc(size);
- if (size == 0)
- {
- free(ptr);
- return NULL;
- }
-
- header_t *bp = (header_t *)ptr - 1;
- size_t new_size = ALIGN(size + sizeof(header_t));
-
- if (bp->size >= new_size)
- return ptr;
-
- void *new_ptr = malloc(size);
- if (!new_ptr)
- return NULL;
-
- memcpy(new_ptr, ptr, bp->size - sizeof(header_t));
- free(ptr);
- return new_ptr;
-}
-
-/* String Conversion*/
-
-unsigned long long strtoull(const char *nptr, char **endptr, int base)
-{
- const char *s = nptr;
- unsigned long long acc;
- unsigned long long cutoff;
- int c;
- int neg = 0, any, cutlim;
-
- if (base < 0 || base == 1 || base > 36)
- {
- if (endptr)
- *endptr = (char *)nptr;
- errno = 0; /* EINVAL */
- return 0;
- }
-
- do
- {
- c = *s++;
- } while (isspace(c));
-
- if (c == '-')
- {
- neg = 1;
- c = *s++;
- }
- else if (c == '+')
- {
- c = *s++;
- }
-
- if ((base == 0 || base == 16) && c == '0' && (*s == 'x' || *s == 'X'))
- {
- c = s[1];
- s += 2;
- base = 16;
- }
- if (base == 0)
- base = (c == '0' ? 8 : 10);
-
- cutoff = ULLONG_MAX / (unsigned long long)base;
- cutlim = ULLONG_MAX % (unsigned long long)base;
-
- for (acc = 0, any = 0;; c = *s++)
- {
- if (isdigit(c))
- c -= '0';
- else if (isalpha(c))
- c -= isupper(c) ? 'A' - 10 : 'a' - 10;
- else
- break;
-
- if (c >= base)
- break;
-
- if (any < 0 || acc > cutoff || (acc == cutoff && c > cutlim))
- any = -1;
- else
- {
- any = 1;
- acc *= base;
- acc += c;
- }
- }
-
- if (any < 0)
- {
- acc = ULLONG_MAX;
- errno = ERANGE;
- }
- else if (neg)
- acc = -acc;
-
- if (endptr != 0)
- *endptr = (char *)(any ? s - 1 : nptr);
-
- return acc;
-}
-
-long long strtoll(const char *nptr, char **endptr, int base)
-{
- const char *s = nptr;
- unsigned long long acc;
- int c, neg = 0;
-
- do
- {
- c = *s++;
- } while (isspace(c));
- if (c == '-')
- neg = 1;
-
- acc = strtoull(nptr, endptr, base);
-
- if (errno == ERANGE && acc == ULLONG_MAX)
- return neg ? LLONG_MIN : LLONG_MAX;
-
- if (!neg && acc > (unsigned long long)LLONG_MAX)
- {
- errno = ERANGE;
- return LLONG_MAX;
- }
- if (neg && acc > (unsigned long long)LLONG_MAX + 1)
- {
- errno = ERANGE;
- return LLONG_MIN;
- }
-
- return neg ? -(long long)acc : (long long)acc;
-}
-
-unsigned long strtoul(const char *nptr, char **endptr, int base)
-{
- unsigned long long ret = strtoull(nptr, endptr, base);
- if (ret > ULONG_MAX)
- {
- errno = ERANGE;
- return ULONG_MAX;
- }
- return (unsigned long)ret;
-}
-
-long strtol(const char *nptr, char **endptr, int base)
-{
- long long ret = strtoll(nptr, endptr, base);
- if (ret > LONG_MAX)
- {
- errno = ERANGE;
- return LONG_MAX;
- }
- if (ret < LONG_MIN)
- {
- errno = ERANGE;
- return LONG_MIN;
- }
- return (long)ret;
-}
-
-int atoi(const char *nptr) { return (int)strtol(nptr, NULL, 10); }
-long atol(const char *nptr) { return strtol(nptr, NULL, 10); }
-long long atoll(const char *nptr) { return strtoll(nptr, NULL, 10); }
-
-double strtod(const char *nptr, char **endptr)
-{
- double val = 0.0;
- int sign = 1;
- const char *s = nptr;
-
- while (isspace(*s))
- s++;
- if (*s == '-')
- {
- sign = -1;
- s++;
- }
- else if (*s == '+')
- s++;
-
- while (isdigit(*s))
- {
- val = val * 10.0 + (*s - '0');
- s++;
- }
- if (*s == '.')
- {
- double factor = 1.0;
- s++;
- while (isdigit(*s))
- {
- factor *= 0.1;
- val += (*s - '0') * factor;
- s++;
- }
- }
-
- if (endptr)
- *endptr = (char *)s;
- return val * sign;
-}
-
-double atof(const char *nptr) { return strtod(nptr, NULL); }
-float strtof(const char *nptr, char **endptr) { return (float)strtod(nptr, endptr); }
-
-/* Sort & Search */
-
-static void swap_bytes(char *a, char *b, size_t size)
-{
- char temp;
- while (size--)
- {
- temp = *a;
- *a++ = *b;
- *b++ = temp;
- }
-}
-
-void qsort(void *base, size_t nmemb, size_t size, int (*compar)(const void *, const void *))
-{
- if (nmemb < 2 || size == 0)
- return;
-
- char *base_ptr = (char *)base;
- char *pivot = base_ptr + (nmemb - 1) * size;
- char *i = base_ptr;
- char *j = base_ptr;
-
- /* Partition */
- for (; j < pivot; j += size)
- {
- if (compar(j, pivot) < 0)
- {
- if (i != j)
- swap_bytes(i, j, size);
- i += size;
- }
- }
- swap_bytes(i, pivot, size);
-
- /* Recurse */
- size_t left_count = (i - base_ptr) / size;
- qsort(base, left_count, size, compar);
- qsort(i + size, nmemb - left_count - 1, size, compar);
-}
-
-void *bsearch(const void *key, const void *base, size_t nmemb, size_t size, int (*compar)(const void *, const void *))
-{
- size_t l = 0, u = nmemb;
- while (l < u)
- {
- size_t idx = (l + u) / 2;
- const void *p = (void *)((const char *)base + (idx * size));
- int cmp = compar(key, p);
- if (cmp < 0)
- u = idx;
- else if (cmp > 0)
- l = idx + 1;
- else
- return (void *)p;
- }
- return NULL;
-}
-
-/* Math & Mics */
-
-int abs(int j) { return (j < 0) ? -j : j; }
-long labs(long j) { return (j < 0) ? -j : j; }
-long long llabs(long long j) { return (j < 0) ? -j : j; }
-
-div_t div(int numer, int denom)
-{
- div_t res = {numer / denom, numer % denom};
- return res;
-}
-ldiv_t ldiv(long numer, long denom)
-{
- ldiv_t res = {numer / denom, numer % denom};
- return res;
-}
-lldiv_t lldiv(long long numer, long long denom)
-{
- lldiv_t res = {numer / denom, numer % denom};
- return res;
-}
-
-static unsigned long next = 1;
-int rand(void)
-{
- next = next * 1103515245 + 12345;
- return (unsigned int)(next / 65536) % 32768;
-}
-void srand(unsigned int seed) { next = seed; }
-
-/* Stub */
-int mblen(const char *s, size_t n) { return (s && *s && n) ? 1 : 0; }
-int mbtowc(wchar_t *pwc, const char *s, size_t n)
-{
- if (!s)
- return 0;
- if (n == 0)
- return -1;
- if (pwc)
- *pwc = (wchar_t)*s;
- return (*s != 0);
-}
-int wctomb(char *s, wchar_t wchar)
-{
- if (!s)
- return 0;
- *s = (char)wchar;
- return 1;
-}
-size_t mbstowcs(wchar_t *dest, const char *src, size_t n)
-{
- size_t i = 0;
- while (src[i] && i < n)
- {
- dest[i] = (wchar_t)src[i];
- i++;
- }
- if (i < n)
- dest[i] = 0;
- return i;
-}
-size_t wcstombs(char *dest, const wchar_t *src, size_t n)
-{
- size_t i = 0;
- while (src[i] && i < n)
- {
- dest[i] = (char)src[i];
- i++;
- }
- if (i < n)
- dest[i] = 0;
- return i;
-} \ No newline at end of file
diff --git a/src/ulib/string.c b/src/ulib/string.c
deleted file mode 100644
index c3dbe9a..0000000
--- a/src/ulib/string.c
+++ /dev/null
@@ -1,335 +0,0 @@
-// SPDX-License-Identifier: GPL-2.0-or-later
-/*
- * Copyright (C) 2026 Richard QIn
- */
-#include "ulib/string.h"
-#include "ulib/stdlib.h"
-
-
-/* Memory Manipulation Functions */
-
-void *memset(void *dst, int c, size_t n)
-{
- char *cdst = (char *)dst;
- for (size_t i = 0; i < n; i++)
- cdst[i] = (char)c;
- return dst;
-}
-
-void *memmove(void *vdst, const void *vsrc, size_t n)
-{
- char *dst = (char *)vdst;
- const char *src = (const char *)vsrc;
- if (dst == src)
- return vdst;
-
- if (src > dst)
- {
- while (n--)
- *dst++ = *src++;
- }
- else
- {
- dst += n;
- src += n;
- while (n-- > 0)
- *--dst = *--src;
- }
- return vdst;
-}
-
-void *memcpy(void *vdst, const void *vsrc, size_t n)
-{
- return memmove(vdst, vsrc, n);
-}
-
-int memcmp(const void *s1, const void *s2, size_t n)
-{
- const unsigned char *p1 = (const unsigned char *)s1;
- const unsigned char *p2 = (const unsigned char *)s2;
- while (n--)
- {
- if (*p1 != *p2)
- return *p1 - *p2;
- p1++;
- p2++;
- }
- return 0;
-}
-
-void *memchr(const void *s, int c, size_t n)
-{
- const unsigned char *p = (const unsigned char *)s;
- while (n--)
- {
- if (*p == (unsigned char)c)
- return (void *)p;
- p++;
- }
- return NULL;
-}
-
-/* String Manipulation Functions */
-
-size_t strlen(const char *s)
-{
- const char *p = s;
- while (*p)
- p++;
- return (size_t)(p - s);
-}
-
-char *strcpy(char *dst, const char *src)
-{
- char *os = dst;
- while ((*dst++ = *src++) != 0)
- ;
- return os;
-}
-
-char *strncpy(char *dst, const char *src, size_t n)
-{
- char *os = dst;
- size_t i;
-
- for (i = 0; i < n && src[i] != '\0'; i++)
- dst[i] = src[i];
-
- for (; i < n; i++)
- dst[i] = '\0';
-
- return os;
-}
-
-char *strcat(char *dst, const char *src)
-{
- char *os = dst;
- while (*dst)
- dst++;
- while ((*dst++ = *src++) != 0)
- ;
- return os;
-}
-
-char *strncat(char *dst, const char *src, size_t n)
-{
- char *os = dst;
- size_t dest_len = strlen(dst);
- size_t i;
-
- dst += dest_len;
-
- for (i = 0; i < n && src[i] != '\0'; i++)
- dst[i] = src[i];
-
- dst[i] = '\0';
-
- return os;
-}
-
-int strcmp(const char *p, const char *q)
-{
- while (*p && *p == *q)
- {
- p++;
- q++;
- }
- return (int)((unsigned char)*p - (unsigned char)*q);
-}
-
-int strncmp(const char *s1, const char *s2, size_t n)
-{
- if (n == 0)
- return 0;
-
- while (n-- > 0 && *s1 && *s1 == *s2)
- {
- if (n == 0 || *s1 == '\0')
- break;
- s1++;
- s2++;
- }
- return (int)((unsigned char)*s1 - (unsigned char)*s2);
-}
-
-char *strchr(const char *s, int c)
-{
- while (*s != (char)c)
- {
- if (!*s++)
- return NULL;
- }
- return (char *)s;
-}
-
-char *strrchr(const char *s, int c)
-{
- const char *last = NULL;
- do
- {
- if (*s == (char)c)
- last = s;
- } while (*s++);
-
- return (char *)last;
-}
-
-
-char *strstr(const char *haystack, const char *needle)
-{
- size_t n_len = strlen(needle);
- if (n_len == 0)
- return (char *)haystack;
-
- for (; *haystack; haystack++)
- {
- if (*haystack != *needle)
- continue;
-
- if (strncmp(haystack, needle, n_len) == 0)
- return (char *)haystack;
- }
- return NULL;
-}
-
-char *strdup(const char *s)
-{
- size_t len = strlen(s) + 1;
- char *new_str = (char *)malloc(len);
- if (new_str == NULL)
- return NULL;
-
- return (char *)memcpy(new_str, s, len);
-}
-
-size_t strlcpy(char *dst, const char *src, size_t size)
-{
- size_t src_len = strlen(src);
-
- if (size > 0)
- {
- size_t copy_len = (src_len >= size) ? size - 1 : src_len;
- memcpy(dst, src, copy_len);
- dst[copy_len] = '\0';
- }
-
- return src_len;
-}
-
-size_t strlcat(char *dst, const char *src, size_t size)
-{
- size_t dst_len = 0;
- size_t src_len = strlen(src);
-
- while (dst_len < size && dst[dst_len] != '\0')
- dst_len++;
-
- if (dst_len == size)
- return size + src_len;
-
- size_t space_left = size - dst_len;
- size_t copy_len = (src_len >= space_left) ? space_left - 1 : src_len;
-
- memcpy(dst + dst_len, src, copy_len);
- dst[dst_len + copy_len] = '\0';
-
- return dst_len + src_len;
-}
-
-
-size_t strspn(const char *s, const char *accept)
-{
- const char *p = s;
- const char *a;
-
- while (*p)
- {
- for (a = accept; *a; a++)
- {
- if (*p == *a)
- break;
- }
- if (*a == '\0')
- return (size_t)(p - s);
- p++;
- }
- return (size_t)(p - s);
-}
-
-size_t strcspn(const char *s, const char *reject)
-{
- const char *p = s;
- const char *r;
-
- while (*p)
- {
- for (r = reject; *r; r++)
- {
- if (*p == *r)
- return (size_t)(p - s);
- }
- p++;
- }
- return (size_t)(p - s);
-}
-
-char *strpbrk(const char *s, const char *accept)
-{
- const char *a;
- while (*s)
- {
- for (a = accept; *a; a++)
- {
- if (*s == *a)
- return (char *)s;
- }
- s++;
- }
- return NULL;
-}
-
-char *strtok(char *str, const char *delim)
-{
- static char *olds;
- char *token;
-
- if (str == NULL)
- str = olds;
-
- str += strspn(str, delim);
- if (*str == '\0')
- {
- olds = str;
- return NULL;
- }
-
- token = str;
- str = strpbrk(token, delim);
-
- if (str == NULL)
- {
- olds = strchr(token, '\0');
- }
- else
- {
- *str = '\0';
- olds = str + 1;
- }
-
- return token;
-}
-
-char *strerror(int errnum)
-{
-
- switch (errnum)
- {
- case 0:
- return "Success";
- // case EINVAL: return "Invalid argument";
- case ENOMEM: return "Out of memory";
-
- default:
- return "Unknown error";
- }
-} \ No newline at end of file
diff --git a/src/ulib/syscalls.c b/src/ulib/syscalls.c
deleted file mode 100644
index 676bf18..0000000
--- a/src/ulib/syscalls.c
+++ /dev/null
@@ -1,153 +0,0 @@
-// SPDX-License-Identifier: GPL-2.0-or-later
-/*
- * Copyright (C) 2026 Richard Qin
- * Libc Syscall Shims
- */
-
-#include "common/types.h"
-#include "user/user.h"
-
-// Define external raw syscalls from usys.S
-extern int sys_openat(int dfd, const char *filename, int flags, int mode);
-extern int sys_mknodat(int dfd, const char *filename, int mode, int dev);
-extern int sys_mkdirat(int dfd, const char *path, int mode);
-extern int sys_unlinkat(int dfd, const char *path, int flags);
-extern int sys_linkat(int olddfd, const char *oldpath, int newdfd, const char *newpath, int flags);
-extern int sys_chdir(const char *path);
-extern int sys_dup(int oldfd);
-extern int sys_fstat(int fd, void *statbuf);
-extern int sys_read(int fd, void *buf, int count);
-extern int sys_write(int fd, const void *buf, int count);
-extern int sys_close(int fd);
-extern int sys_pipe2(int pipefd[2], int flags);
-extern int sys_clone(unsigned long flags, void *stack, int *ptid, void *tls, int *ctid);
-extern int sys_execve(const char *path, char *const argv[], char *const envp[]);
-extern int sys_wait4(int pid, int *status, int options, void *rusage);
-extern int sys_exit(int status);
-extern int sys_getpid();
-extern int sys_brk(int n);
-extern int sys_kill(int pid, int sig);
-extern int sys_nanosleep(void *req, void *rem);
-extern int sys_reboot(int magic1, int magic2, int cmd, void *arg);
-extern int sys_lseek(int fd, int offset, int whence);
-extern void sys_putc(char c);
-extern int sys_disk_test();
-
-// --- POSIX Implementation ---
-
-int open(const char *path, int flags)
-{
- return sys_openat(AT_FDCWD, path, flags, 0);
-}
-
-int mknod(const char *path, short major, short minor)
-{
- // Pack major/minor into simplified dev_t (major << 20 | minor)
- int dev = (major << 20) | (minor & 0xFFFFF);
- return sys_mknodat(AT_FDCWD, path, 0, dev);
-}
-
-int mkdir(const char *path)
-{
- return sys_mkdirat(AT_FDCWD, path, 0);
-}
-
-int unlink(const char *path)
-{
- return sys_unlinkat(AT_FDCWD, path, 0);
-}
-
-int link(const char *oldpath, const char *newpath)
-{
- return sys_linkat(AT_FDCWD, oldpath, AT_FDCWD, newpath, 0);
-}
-
-int chdir(const char *path)
-{
- return sys_chdir(path);
-}
-
-int fork()
-{
- return sys_clone(0, 0, 0, 0, 0);
-}
-
-int exec(char *path, char **argv)
-{
- return sys_execve(path, argv, 0);
-}
-
-int wait(uint64 status_addr)
-{
- return sys_wait4(-1, (int *)status_addr, 0, 0);
-}
-
-int pipe(int p[])
-{
- return sys_pipe2(p, 0);
-}
-
-int read(int fd, void *buf, int n)
-{
- return sys_read(fd, buf, n);
-}
-
-int write(int fd, const void *buf, int n)
-{
- return sys_write(fd, buf, n);
-}
-
-int close(int fd)
-{
- return sys_close(fd);
-}
-
-int fstat(int fd, void *st)
-{
- return sys_fstat(fd, st);
-}
-
-int dup(int fd)
-{
- return sys_dup(fd);
-}
-
-int getpid()
-{
- return sys_getpid();
-}
-
-char *sbrk(int n)
-{
- return (char *)(long)sys_brk(n);
-}
-
-int kill(int pid)
-{
- return sys_kill(pid, 0);
-}
-
-int sleep(int ticks)
-{
- return sys_nanosleep((void *)(long)ticks, 0);
-}
-
-int shutdown()
-{
- return sys_reboot(0, 0, 0, 0);
-}
-
-void putc(char c)
-{
- sys_putc(c);
-}
-
-int disk_test()
-{
- return sys_disk_test();
-}
-
-int lseek(int fd, int offset, int whence)
-{
- return sys_lseek(fd, offset, whence);
-} \ No newline at end of file