Files
sx/vendors/ffi_callback/ffi_callback.h
agra 31ab175d56 ffi 0.6: C-to-sx callback baseline (1-arg + ctx-ptr forms)
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.
2026-05-19 11:48:34 +03:00

14 lines
663 B
C

// C-to-sx callback FFI baseline. C takes a function pointer + a value,
// invokes the callback with the value, and returns whatever the callback
// returned. Mirrors the `app->onInputEvent` pattern in
// library/modules/platform/android.sx where sx installs a handler that
// native_app_glue invokes from its input-event loop.
int ffi_apply_callback(int (*cb)(int), int value);
// Two-arg variant — the actual chess-on-Android shape:
// the callback receives a pointer + a value (mirrors
// onInputEvent(app, event) where both are opaque pointers from
// the C caller's point of view).
int ffi_apply_callback2(int (*cb)(void *ctx, int v), void *ctx, int v);