#include "handles.h" #include "syscall.h" static int s_handle_invoke_objdir_nmemb(objdir_t *root_dir, objdir_t *target_dir, void *payload) { struct syscallInvoke_objdir_nmemb *payloadStruct = payload; payloadStruct->value = target_dir->self.data; return 0; } static int s_handle_invoke_objdir_getmemb(objdir_t *root_dir, objdir_t *target_dir, void *payload) { struct syscallInvoke_objdir_getmemb *payloadStruct = payload; payloadStruct->value = target_dir->entries[payloadStruct->member].type; return 0; } static int (*s_invoke_handles[])(objdir_t*, objdir_t*, void*) = { [INVOKE_OBJDIR_NMEMB] = s_handle_invoke_objdir_nmemb, [INVOKE_OBJDIR_GETMEMB] = s_handle_invoke_objdir_getmemb }; static size_t s_invoke_handles_count = sizeof(s_invoke_handles) / sizeof(void*); int syscall_handle_invoke_objdir(objdir_t *root_dir, objdir_t *target_dir, void *payload) { struct syscallInvokeHeader *invokeHeader = payload; size_t funcid = invokeHeader->func_id; if(funcid >= s_invoke_handles_count) return -1; return s_invoke_handles[funcid](root_dir, target_dir, payload); }