/* platform.syscall.fn.c
 * ~ lexi hale <lexi@hale.su>
 * this file provides a unified interface
 * to the host operating system's syscalls.
 * its function signature may vary across
 * OSes, as the details of each's syscall
 * implementation may vary drastically.
 */

#include <k/def.h>
#include <k/type.h>

#ifdef KFenv_posix
#	include <posix.h>
#else
	Knoimpl(k_platform_syscall)
#endif

extern void k_platform_syscall_raw (
		k_platform_syscall_return* return_slot,
		k_platform_syscall_error*  error_no_slot,
		enum k_platform_syscall    syscall_no,
		u8                         valency,
		s64*                       args);

struct k_platform_syscall_answer
k_platform_syscall(enum k_platform_syscall call, u8 valency, s64 args[]) {
	struct k_platform_syscall_answer answer;

	k_platform_syscall_raw
		(&answer.ret,
		 &answer.error,
		 call, valency, args);

	return answer;
}
