#include #include #include static const char* kName = "yams_fuzz_abi_test"; static const char* kVersion = "0.0.1"; static const char* kManifest = "{" "\"name\":\"yams_fuzz_abi_test\"," "\"version\":\"0.0.1\"," "\"abi\":1," "\"interfaces\":[{\"id\":\"fuzz_iface_v1\",\"version\":1}]" "}"; struct FuzzIfaceV1 { int (*ping)(int x); }; static int iface_ping(int x) { return x ^ 0x5A5A; } static struct FuzzIfaceV1 kIface = {iface_ping}; YAMS_PLUGIN_API int yams_plugin_get_abi_version(void) { return YAMS_PLUGIN_ABI_VERSION; } YAMS_PLUGIN_API const char* yams_plugin_get_name(void) { return kName; } YAMS_PLUGIN_API const char* yams_plugin_get_version(void) { return kVersion; } YAMS_PLUGIN_API const char* yams_plugin_get_manifest_json(void) { return kManifest; } YAMS_PLUGIN_API int yams_plugin_init(const char* config_json, const void* host_context) { (void)config_json; (void)host_context; return YAMS_PLUGIN_OK; } YAMS_PLUGIN_API void yams_plugin_shutdown(void) {} YAMS_PLUGIN_API int yams_plugin_get_interface(const char* iface_id, uint32_t version, void** out_iface) { if (!iface_id || !out_iface) { return YAMS_PLUGIN_ERR_INVALID; } if (version == 1 && strcmp(iface_id, "fuzz_iface_v1") == 0) { *out_iface = &kIface; return YAMS_PLUGIN_OK; } *out_iface = NULL; return YAMS_PLUGIN_ERR_NOT_FOUND; } YAMS_PLUGIN_API int yams_plugin_get_health_json(char** out_json) { if (!out_json) { return YAMS_PLUGIN_ERR_INVALID; } const char* payload = "{\"ok\":true,\"plugin\":\"yams_fuzz_abi_test\"}"; size_t n = strlen(payload) + 1; char* p = (char*)malloc(n); if (!p) { return YAMS_PLUGIN_ERR_INIT_FAILED; } memcpy(p, payload, n); *out_json = p; return YAMS_PLUGIN_OK; }