mirror of
https://github.com/subhobhai943/SUB-OS.git
synced 2026-10-26 00:52:50 +00:00
feat: Massive OS expansion with IPC, Sound & TTS, Block layer, FAT32/ext2/sysfs, Signals, Syscalls, Modules, Drivers & 50+ LazyBox applets
This commit is contained in:
1 parent
5662be29f5
commit
d680335f05
64 files changed
+2370
-166
No files matched your search
@@ -0,0 +1,38 @@
|
||||
#include <kernel/signal.h>
|
||||
#include <kernel/printk.h>
|
||||
#include <lib/string.h>
|
||||
|
||||
static sighandler_t signal_handlers[NSIG];
|
||||
static sigset_t pending_signals = 0;
|
||||
|
||||
void signal_init(void) {
|
||||
memset(signal_handlers, 0, sizeof(signal_handlers));
|
||||
pending_signals = 0;
|
||||
printk(KERN_INFO "SIGNAL: POSIX Signal subsystem initialized (32 signals)\n");
|
||||
}
|
||||
|
||||
sighandler_t signal_set_handler(int signum, sighandler_t handler) {
|
||||
if (signum <= 0 || signum >= NSIG) return SIG_ERR;
|
||||
sighandler_t old = signal_handlers[signum];
|
||||
signal_handlers[signum] = handler;
|
||||
return old;
|
||||
}
|
||||
|
||||
int signal_send(uint32_t pid, int signum) {
|
||||
(void)pid;
|
||||
if (signum <= 0 || signum >= NSIG) return -1;
|
||||
pending_signals |= (1U << signum);
|
||||
signal_deliver_pending();
|
||||
return 0;
|
||||
}
|
||||
|
||||
void signal_deliver_pending(void) {
|
||||
for (int i = 1; i < NSIG; i++) {
|
||||
if (pending_signals & (1U << i)) {
|
||||
pending_signals &= ~(1U << i);
|
||||
if (signal_handlers[i] && signal_handlers[i] != SIG_IGN && signal_handlers[i] != SIG_DFL) {
|
||||
signal_handlers[i](i);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in new issue
Block a user