add read file util

This commit is contained in:
Matthew 2025-11-21 16:34:14 +11:00
parent cce005d410
commit 0b815bdc8d
2 changed files with 61 additions and 1 deletions

View File

@ -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);
}
}

2
util.d
View File

@ -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)