hoshi-lang dev
Yet another programming language
Loading...
Searching...
No Matches
signal.h
Go to the documentation of this file.
1//
2// Created by XIaokang00010 on 2025/11/02.
3//
4
5#ifndef HOSHILANGSTD_LIBSIG
6#define HOSHILANGSTD_LIBSIG
7
8#include <csignal>
10
11#ifdef _WIN32
12#include <windows.h>
13// Windows doesn't define SIGALRM, we define a custom ID for our emulation
14#define LIBSIG_INTERNAL_ALRM 14
15#define LIBSIG_INTERNAL_KILL 9
16#else
17#include <unistd.h>
18#include <sys/types.h>
19#define LIBSIG_INTERNAL_ALRM SIGALRM
20#define LIBSIG_INTERNAL_KILL SIGKILL
21#endif
22
23#define LIBSIG_EXPORT extern "C"
24
25// Error Codes
26#define LIBSIG_SUCCESS 0
27#define LIBSIG_ERR_REGISTER_FAIL -1
28#define LIBSIG_ERR_UNSUPPORTED -2
29#define LIBSIG_ERR_CANT_CATCH_KILL -3
30#define LIBSIG_ERR_RAISE_FAIL -4
31
32#define HS_SIGINT SIGINT
33#define HS_SIGTERM SIGTERM
34#define HS_SIGALRM LIBSIG_INTERNAL_ALRM
35#define HS_SIGKILL LIBSIG_INTERNAL_KILL
36
37#define HANDLER_TYPE_SIGINT 0
38#define HANDLER_TYPE_SIGTERM 1
39#define HANDLER_TYPE_SIGALRM 2
40
41typedef void (*runtime_signal_handler_bare_t)(int signum);
42typedef void (*runtime_signal_handler_t)(YoiObject *self, YoiIntegerObject *signum);
43
45 unsigned long long gc_refcount;
46 unsigned long long type_id;
47 void *this_ptr;
48 void *(*gc_inc_func)(void *this_ptr);
49 void *(*gc_dec_func)(void *this_ptr);
51};
52
57
59
60void runtime_signal_handler(int signum);
61
63
64// Register a handler for a specific signal
65// Returns 0 on success, or negative error code
67
68// Schedule an alarm signal to be delivered after seconds
69// Passing 0 cancels any pending alarm.
70LIBSIG_EXPORT int runtime_signal_alarm(unsigned int seconds);
71
72// Raise a signal to the current process
74
75// Restore default handling for a signal
77
78// Ignore a signal
80
81#endif // HOSHILANGSTD_LIBSIG
void runtime_signal_handler(int signum)
Definition signal.cpp:193
LIBSIG_EXPORT int runtime_signal_ignore(int signum)
Definition signal.cpp:177
LIBSIG_EXPORT YoiIntegerObject * runtime_signal_register(YoiIntegerObject *signum, YoiVoidIntCallableInterface *handler)
Definition signal.cpp:34
LIBSIG_EXPORT void runtime_signal_init()
Definition signal.cpp:220
LIBSIG_EXPORT int runtime_signal_alarm(unsigned int seconds)
Definition signal.cpp:79
#define LIBSIG_EXPORT
Definition signal.h:23
void(* runtime_signal_handler_t)(YoiObject *self, YoiIntegerObject *signum)
Definition signal.h:42
runtime_signal_handler_info * runtime_signal_handlers[3]
Definition signal.cpp:5
LIBSIG_EXPORT int runtime_signal_raise(int signum)
Definition signal.cpp:113
void(* runtime_signal_handler_bare_t)(int signum)
Definition signal.h:41
LIBSIG_EXPORT int runtime_signal_default(int signum)
Definition signal.cpp:144
unsigned long long gc_refcount
Definition signal.h:45
unsigned long long type_id
Definition signal.h:46
runtime_signal_handler_t handler
Definition signal.h:50
runtime_signal_handler_info * next
Definition signal.h:55
YoiVoidIntCallableInterface * self
Definition signal.h:54