summaryrefslogtreecommitdiffhomepage
path: root/dev/libSystem/SystemKit/Syscall.h
blob: 5a840df14b797e48c073bca0334a1b890cfe2a0b (plain)
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
/* -------------------------------------------

  Copyright (C) 2025, Amlal El Mahrouss, all rights reserved.

------------------------------------------- */

#pragma once

#include <libSystem/SystemKit/System.h>
#include <cstdarg>

IMPORT_C VoidPtr libsys_syscall_arg_1(SizeT id);
IMPORT_C VoidPtr libsys_syscall_arg_2(SizeT id, VoidPtr arg1);
IMPORT_C VoidPtr libsys_syscall_arg_3(SizeT id, VoidPtr arg1, VoidPtr arg3);
IMPORT_C VoidPtr libsys_syscall_arg_4(SizeT id, VoidPtr arg1, VoidPtr arg3, VoidPtr arg4);

inline UInt64 libsys_hash_64(const Char* path) {
  const UInt64 FNV_OFFSET_BASIS = 0xcbf29ce484222325ULL;
  const UInt64 FNV_PRIME        = 0x100000001b3ULL;

  UInt64 hash = FNV_OFFSET_BASIS;

  while (*path) {
    hash ^= (Char) (*path++);
    hash *= FNV_PRIME;
  }

  return hash;
}

#ifndef SYSCALL_HASH
#define SYSCALL_HASH(str) libsys_hash_64(str)
#endif  // !SYSCALL_HASH