Skip to content

Commit f553410

Browse files
committed
Fix NIF symbols for OTP 26+ and macOS compatibility
- Replace enif_get_int64/enif_get_uint64 with enif_get_long/enif_get_ulong (int64 variants don't exist as exported symbols in BEAM) - Replace enif_make_tuple2 with enif_make_tuple_from_array (tuple2 is a C macro, not an exported function) - Fix module name to match Elixir module: Elixir.FlameOn.Client.NativeProcessor
1 parent 4ba5b99 commit f553410

1 file changed

Lines changed: 10 additions & 8 deletions

File tree

src/nif.zig

Lines changed: 10 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -73,12 +73,12 @@ extern fn enif_map_iterator_next(env: ?*ErlNifEnv, iter: *ErlNifMapIterator) cal
7373
extern fn enif_map_iterator_destroy(env: ?*ErlNifEnv, iter: *ErlNifMapIterator) callconv(.c) void;
7474
extern fn enif_inspect_binary(env: ?*ErlNifEnv, term: ERL_NIF_TERM, bin: *ErlNifBinary) callconv(.c) c_int;
7575
extern fn enif_get_double(env: ?*ErlNifEnv, term: ERL_NIF_TERM, dp: *f64) callconv(.c) c_int;
76-
extern fn enif_get_uint64(env: ?*ErlNifEnv, term: ERL_NIF_TERM, val: *u64) callconv(.c) c_int;
77-
extern fn enif_get_int64(env: ?*ErlNifEnv, term: ERL_NIF_TERM, val: *i64) callconv(.c) c_int;
76+
extern fn enif_get_ulong(env: ?*ErlNifEnv, term: ERL_NIF_TERM, val: *c_ulong) callconv(.c) c_int;
77+
extern fn enif_get_long(env: ?*ErlNifEnv, term: ERL_NIF_TERM, val: *c_long) callconv(.c) c_int;
7878
extern fn enif_alloc_binary(size: usize, bin: *ErlNifBinary) callconv(.c) c_int;
7979
extern fn enif_make_binary(env: ?*ErlNifEnv, bin: *ErlNifBinary) callconv(.c) ERL_NIF_TERM;
8080
extern fn enif_make_atom(env: ?*ErlNifEnv, name: [*:0]const u8) callconv(.c) ERL_NIF_TERM;
81-
extern fn enif_make_tuple2(env: ?*ErlNifEnv, e1: ERL_NIF_TERM, e2: ERL_NIF_TERM) callconv(.c) ERL_NIF_TERM;
81+
extern fn enif_make_tuple_from_array(env: ?*ErlNifEnv, arr: [*]const ERL_NIF_TERM, count: c_uint) callconv(.c) ERL_NIF_TERM;
8282
extern fn enif_alloc(size: usize) callconv(.c) ?*anyopaque;
8383
extern fn enif_free(ptr: ?*anyopaque) callconv(.c) void;
8484
extern fn enif_get_map_size(env: ?*ErlNifEnv, map: ERL_NIF_TERM, size: *usize) callconv(.c) c_int;
@@ -135,7 +135,7 @@ var funcs = [_]NifFunc{
135135
var entry = ErlNifEntry{
136136
.major = 2,
137137
.minor = 17,
138-
.name = "Elixir.FlameOn.Processor.NIF",
138+
.name = "Elixir.FlameOn.Client.NativeProcessor",
139139
.num_of_funcs = 1,
140140
.funcs = &funcs,
141141
.load = null,
@@ -196,8 +196,8 @@ fn processStacksNif(env: ?*ErlNifEnv, argc: c_int, argv: [*]const ERL_NIF_TERM)
196196
paths[i] = bin.data[0..bin.size];
197197

198198
// Value is an integer (duration in microseconds)
199-
var dur_signed: i64 = 0;
200-
if (enif_get_int64(env, value, &dur_signed) == 0) return makeError(env);
199+
var dur_signed: c_long = 0;
200+
if (enif_get_long(env, value, &dur_signed) == 0) return makeError(env);
201201
if (dur_signed < 0) return makeError(env);
202202
durations[i] = @intCast(dur_signed);
203203

@@ -226,11 +226,13 @@ fn processStacksNif(env: ?*ErlNifEnv, argc: c_int, argv: [*]const ERL_NIF_TERM)
226226

227227
const ok_atom = enif_make_atom(env, "ok");
228228
const bin_term = enif_make_binary(env, &result_bin);
229-
return enif_make_tuple2(env, ok_atom, bin_term);
229+
const ok_tuple = [_]ERL_NIF_TERM{ ok_atom, bin_term };
230+
return enif_make_tuple_from_array(env, &ok_tuple, 2);
230231
}
231232

232233
fn makeError(env: ?*ErlNifEnv) ERL_NIF_TERM {
233234
const error_atom = enif_make_atom(env, "error");
234235
const reason_atom = enif_make_atom(env, "processing_failed");
235-
return enif_make_tuple2(env, error_atom, reason_atom);
236+
const err_tuple = [_]ERL_NIF_TERM{ error_atom, reason_atom };
237+
return enif_make_tuple_from_array(env, &err_tuple, 2);
236238
}

0 commit comments

Comments
 (0)