44 lines
798 B
D
44 lines
798 B
D
module libxdiff.init;
|
|
|
|
import core.stdc.stdlib : malloc, free, realloc;
|
|
import std.exception : enforce;
|
|
import xdiff;
|
|
|
|
extern (C) private void* wrap_malloc(void*, uint size)
|
|
{
|
|
return malloc(size);
|
|
}
|
|
|
|
extern (C) private void wrap_free(void*, void* p)
|
|
{
|
|
free(p);
|
|
}
|
|
|
|
extern (C) private void* wrap_realloc(void*, void* p, uint size)
|
|
{
|
|
return realloc(p, size);
|
|
}
|
|
|
|
void ensureInit()
|
|
{
|
|
static bool done = false;
|
|
if (done)
|
|
return;
|
|
|
|
memallocator_t m;
|
|
m.priv = null;
|
|
m.malloc = &wrap_malloc;
|
|
m.free = &wrap_free;
|
|
m.realloc = &wrap_realloc;
|
|
|
|
enforce(xdl_set_allocator(&m) == 0, "xdl_set_allocator failed");
|
|
done = true;
|
|
}
|
|
|
|
mmfile_t initMmfile(size_t len)
|
|
{
|
|
ensureInit();
|
|
mmfile_t mf;
|
|
enforce(xdl_init_mmfile(&mf, cast(long) len, XDL_MMF_ATOMIC) == 0, "xdl_init_mmfile failed");
|
|
return mf;
|
|
}
|