93/93 regression tests pass (+ffi-06-callback).
Mirrors the `app->onInputEvent` install pattern from
library/modules/platform/android.sx:
1. (s32) -> s32 — single primitive arg/return
2. (*void, s32) -> s32 — opaque ctx pointer + value
(the onInputEvent shape)
Side effects via two file-level globals so the test observes both
the return value AND state mutation across multiple calls:
- g_callback_hits = N proves the callback fired N times.
- g_callback_sum = sum of args proves each individual call landed
with the correct value.
The ctx-pointer variant casts `*void` back to `*s32` inside the
callback and reads through it (`p.*`), proving the pointer survives
the round-trip with no aliasing weirdness.
10 lines
202 B
C
10 lines
202 B
C
#include "ffi_callback.h"
|
|
|
|
int ffi_apply_callback(int (*cb)(int), int value) {
|
|
return cb(value);
|
|
}
|
|
|
|
int ffi_apply_callback2(int (*cb)(void *ctx, int v), void *ctx, int v) {
|
|
return cb(ctx, v);
|
|
}
|