From 0b815bdc8d631cb386c3fd288a9d861d32e24f34 Mon Sep 17 00:00:00 2001 From: Matthew Date: Fri, 21 Nov 2025 16:34:14 +1100 Subject: [PATCH] add read file util --- platform.d | 60 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ util.d | 2 +- 2 files changed, 61 insertions(+), 1 deletion(-) diff --git a/platform.d b/platform.d index bc7f04b..4e8ebe8 100644 --- a/platform.d +++ b/platform.d @@ -4,6 +4,7 @@ import dlib.aliases; import dlib.alloc : Reset; import dlib.alloc; import dlib.util; +import dlib.math; import includes; @@ -15,6 +16,8 @@ import core.time; import core.volatile; import core.atomic; +import core.stdc.stdio : FilePtr = FILE, FRead = fread; + const WINDOW_EDGE_BUFFER = 50; enum Input : u32 @@ -392,6 +395,7 @@ import core.sys.posix.pthread : PThread = pthread_t, import core.stdc.string : strlen; + const u32 X11_CB_TRANSFER_SIZE_DEFAULT = 1048576; const u32 X11_TIMEOUT_DEFAULT = 1500; @@ -1884,6 +1888,49 @@ Kill() } +// TODO: replace this with proper OS stuff +u8[] +LoadFile(Arena* arena, string file_name) +{ + u8[] data; + + const u64 buf_size = MB(8); + static u8[] buf; + if(!buf) + { + buf = Alloc!(u8)(buf_size); + } + + File f; + try + { + f = File(file_name, "rb"); + } + catch(Exception e) + { + + } + + if(f.isOpen) + { + u64 size = f.size(); + data = Alloc!(u8)(arena, size); + + auto fp = f.getFP(); + for(u64 pos = 0; pos < size;) + { + u64 length = Min(size-pos, buf_size); + fread(data.ptr+pos, 1, length, fp); + pos -= length; + } + } + + f.flush(); + f.close(); + + return data; +} + unittest { { // Keys @@ -1911,5 +1958,18 @@ unittest assert(wd == s); } + + { // File Reads + Arena arena = CreateArena(MB(2)); + + u8[] data_valid, data_test; + + File f = File("platform.d", "rb"); + + data_valid = f.rawRead(new u8[f.size()]); + data_test = LoadFile(&arena, "platform.d"); + + assert(data_valid == data_test); + } } diff --git a/util.d b/util.d index c15bc4e..5f2aee5 100644 --- a/util.d +++ b/util.d @@ -77,7 +77,7 @@ Logf(Args...)(string fmt, Args args, string prefix = "INFO", string func = __FUN try { debug writef("[%s] FUNC: [%s]: ", prefix, func); - else write("[%s]: ", prefix); + else writef("[%s]: ", prefix); writefln(fmt, args); } catch (Exception e)