add read file util
This commit is contained in:
parent
cce005d410
commit
0b815bdc8d
60
platform.d
60
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);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user