@ -0,0 +1,15 @@ | |||||
#include "erl_nif.h" | |||||
#include <stdio.h> | |||||
static ERL_NIF_TERM getBinAddr(ErlNifEnv *env, int argc, const ERL_NIF_TERM argv[]) { | |||||
ErlNifBinary bin; | |||||
enif_inspect_binary(env, argv[0], &bin); | |||||
char buf[256]; | |||||
sprintf(buf, "bin: size=%zu, ptr=%p", bin.size, bin.data); | |||||
return enif_make_string(env, buf, ERL_NIF_LATIN1); | |||||
} | |||||
static ErlNifFunc nif_funcs[] = { | |||||
{"getBinAddr", 1, getBinAddr} | |||||
}; | |||||
ERL_NIF_INIT(binaryAddr, nif_funcs, NULL, NULL, NULL, NULL); |
@ -0,0 +1,7 @@ | |||||
{port_specs, [ | |||||
{"../../priv/binaryAddr.so", ["*.c"]} | |||||
]}. | |||||
@ -0,0 +1,23 @@ | |||||
-module(binaryAddr). | |||||
-export([getBinAddr/1]). | |||||
-on_load(init/0). | |||||
init() -> | |||||
SoName = | |||||
case code:priv_dir(?MODULE) of | |||||
{error, _} -> | |||||
case code:which(?MODULE) of | |||||
Filename when is_list(Filename) -> | |||||
filename:join([filename:dirname(Filename), "../priv", "binaryAddr"]); | |||||
_ -> | |||||
filename:join("../priv", "binaryAddr") | |||||
end; | |||||
Dir -> | |||||
filename:join(Dir, "binaryAddr") | |||||
end, | |||||
erlang:load_nif(SoName, 0). | |||||
getBinAddr(_Bin) -> | |||||
erlang:error({"NIF not implemented in nif_test at line", ?LINE}). |