blob: 4698f341c813925389b25606b4b6ece4a8b6edb7 (
plain) (
blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
|
#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);
}
|