From: Lukas Krickl Date: Wed, 11 Mar 2026 12:07:18 +0000 (+0100) Subject: scripting: Added simple file reader X-Git-Url: https://git.krickl.dev/?a=commitdiff_plain;h=32ee14e3770b6ad13b63fcec8dda686497100f20;p=lrts%2F.git scripting: Added simple file reader --- diff --git a/src/l_lsl.c b/src/l_lsl.c index 3c449a9..c148d31 100644 --- a/src/l_lsl.c +++ b/src/l_lsl.c @@ -1,7 +1,8 @@ #include "l_lsl.h" #include "u_mem.h" +#include "u_file.h" -struct l_lsl_vm l_lsl_vm_init() { +struct l_lsl_vm l_lsl_vm_init(void) { struct l_lsl_vm v; u_memset(&v, 0, sizeof(v)); @@ -24,8 +25,18 @@ struct l_lsl_value l_lsl_value_init(void) { struct l_lsl_value l_lsl_compile_file(struct l_lsl_vm *v, const char *path) { struct l_lsl_value val = l_lsl_value_init(); - LRTS_UNUSED(v); - LRTS_UNUSED(path); + const char *src = u_file_read(path); + + if (src == LRTS_NULL) { + u_log(U_LOG_CRIT, "%s: No such file or directory\n", path); + v->err = L_LSL_ERR_FILE_NOT_FOUND; + return val; + } + + u_printf("%s\n", src); + + u_free((void*)src); + return val; } diff --git a/src/l_lsl.h b/src/l_lsl.h index 52483c4..8b11448 100644 --- a/src/l_lsl.h +++ b/src/l_lsl.h @@ -36,7 +36,8 @@ enum l_lsl_data_type { }; enum l_lsl_error { - L_LSL_ERR_OK = 0 + L_LSL_ERR_OK = 0, + L_LSL_ERR_FILE_NOT_FOUND }; struct l_lsl_table; diff --git a/src/tests/lsl/intliteral.lsl b/src/tests/lsl/intliteral.lsl new file mode 100644 index 0000000..d00491f --- /dev/null +++ b/src/tests/lsl/intliteral.lsl @@ -0,0 +1 @@ +1 diff --git a/src/tests/t_lsl.c b/src/tests/t_lsl.c index 68d0494..7a3a9d1 100644 --- a/src/tests/t_lsl.c +++ b/src/tests/t_lsl.c @@ -1,5 +1,27 @@ +#define T_LSL_ASSERT(expected_value, expected_err, src_file) \ + if (t_lsl_assert(expected_value, expected_err, src_file)) { \ + return 1; \ + } + +int t_lsl_assert(struct l_lsl_value expect_value, enum l_lsl_error expect_err, + const char *src_file) { + struct l_lsl_vm v = l_lsl_vm_init(); + struct l_lsl_value res = l_lsl_exec(&v, src_file); + enum l_lsl_error err = v.err; + + l_lsl_vm_free(&v); + + T_ASSERT(err == expect_err, ("Unexpected error code %d\n", err)); + T_ASSERT(res.type == expect_value.type, ("Unexpected return value")); + + + return 0; +} + int t_test_lsl() { - T_ASSERT(1, ("")); + struct l_lsl_value v = l_lsl_value_init(); + + T_LSL_ASSERT(v, L_LSL_ERR_OK, "./src/tests/lsl/intliteral.lsl"); return 0; } diff --git a/src/u_file.c b/src/u_file.c index 538ba27..f84309b 100644 --- a/src/u_file.c +++ b/src/u_file.c @@ -3,12 +3,13 @@ const char *u_file_read(const char *path) { u32 len = 16; u32 index = 0; - char *buf = u_malloc(len); + char *buf; char c; U_FILE *f = u_fopen(path, "r"); if (f == LRTS_NULL) { return LRTS_NULL; } + buf = u_malloc(len); while ((c = u_fgetc(f)) >= 0) { if (index >= len) { @@ -17,6 +18,13 @@ const char *u_file_read(const char *path) { } buf[index++] = c; } + + /* ensure we terminate */ + if (index >= len) { + len += 1; + buf = u_realloc(buf, len); + } + buf[index] = '\0'; return buf; }