summaryrefslogtreecommitdiffstats
path: root/syscall/handler.c
blob: 5cafdc69e6b5ba575cca6dbb8475b905d19f4def (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
#include "handler.h"
#include "print.h"
#include "umode_vma.h"
#include "api/errno.h"

static void *s_handlers[] = {
    (void*)_handler_dbg_log,
    (void*)_handler_exit
};
static size_t s_handlers_size = sizeof(s_handlers);

int
_syscall_handler(void *data)
{
    uintmax_t req_id = 0;
    if(user_vma_read(&req_id, data, sizeof(uintmax_t)) != 0)
        return -EFAIL;

    if(req_id >= s_handlers_size) return -1;
    int (*handle)(void*) = (int (*)(void*))s_handlers[req_id];
    kdbgf("syscall id %i handle %p\n", req_id, handle);
    return handle(data);
}