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 : Reset;
import dlib.alloc; import dlib.alloc;
import dlib.util; import dlib.util;
import dlib.math;
import includes; import includes;
@ -15,6 +16,8 @@ import core.time;
import core.volatile; import core.volatile;
import core.atomic; import core.atomic;
import core.stdc.stdio : FilePtr = FILE, FRead = fread;
const WINDOW_EDGE_BUFFER = 50; const WINDOW_EDGE_BUFFER = 50;
enum Input : u32 enum Input : u32
@ -392,6 +395,7 @@ import core.sys.posix.pthread : PThread = pthread_t,
import core.stdc.string : strlen; import core.stdc.string : strlen;
const u32 X11_CB_TRANSFER_SIZE_DEFAULT = 1048576; const u32 X11_CB_TRANSFER_SIZE_DEFAULT = 1048576;
const u32 X11_TIMEOUT_DEFAULT = 1500; 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 unittest
{ {
{ // Keys { // Keys
@ -1911,5 +1958,18 @@ unittest
assert(wd == s); 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 try
{ {
debug writef("[%s] FUNC: [%s]: ", prefix, func); debug writef("[%s] FUNC: [%s]: ", prefix, func);
else write("[%s]: ", prefix); else writef("[%s]: ", prefix);
writefln(fmt, args); writefln(fmt, args);
} }
catch (Exception e) catch (Exception e)