Skip to main content

seq_runtime/signal/
constants.rs

1//! Signal number constants exposed to Seq as `signal.SIGINT`, `signal.SIGTERM`,
2//! etc. Unix builds return the real libc value; non-Unix builds return 0 so the
3//! FFI shape stays the same.
4
5use crate::stack::{Stack, push};
6use crate::value::Value;
7
8/// Get SIGINT constant (Ctrl+C interrupt)
9///
10/// Stack effect: ( -- Int )
11///
12/// # Safety
13/// Stack pointer must be valid.
14#[cfg(unix)]
15#[unsafe(no_mangle)]
16pub unsafe extern "C" fn patch_seq_signal_sigint(stack: Stack) -> Stack {
17    unsafe { push(stack, Value::Int(libc::SIGINT as i64)) }
18}
19
20/// Get SIGTERM constant (termination request)
21///
22/// Stack effect: ( -- Int )
23///
24/// # Safety
25/// Stack pointer must be valid.
26#[cfg(unix)]
27#[unsafe(no_mangle)]
28pub unsafe extern "C" fn patch_seq_signal_sigterm(stack: Stack) -> Stack {
29    unsafe { push(stack, Value::Int(libc::SIGTERM as i64)) }
30}
31
32/// Get SIGHUP constant (hangup)
33///
34/// Stack effect: ( -- Int )
35///
36/// # Safety
37/// Stack pointer must be valid.
38#[cfg(unix)]
39#[unsafe(no_mangle)]
40pub unsafe extern "C" fn patch_seq_signal_sighup(stack: Stack) -> Stack {
41    unsafe { push(stack, Value::Int(libc::SIGHUP as i64)) }
42}
43
44/// Get SIGPIPE constant (broken pipe)
45///
46/// Stack effect: ( -- Int )
47///
48/// # Safety
49/// Stack pointer must be valid.
50#[cfg(unix)]
51#[unsafe(no_mangle)]
52pub unsafe extern "C" fn patch_seq_signal_sigpipe(stack: Stack) -> Stack {
53    unsafe { push(stack, Value::Int(libc::SIGPIPE as i64)) }
54}
55
56/// Get SIGUSR1 constant (user signal 1)
57///
58/// Stack effect: ( -- Int )
59///
60/// # Safety
61/// Stack pointer must be valid.
62#[cfg(unix)]
63#[unsafe(no_mangle)]
64pub unsafe extern "C" fn patch_seq_signal_sigusr1(stack: Stack) -> Stack {
65    unsafe { push(stack, Value::Int(libc::SIGUSR1 as i64)) }
66}
67
68/// Get SIGUSR2 constant (user signal 2)
69///
70/// Stack effect: ( -- Int )
71///
72/// # Safety
73/// Stack pointer must be valid.
74#[cfg(unix)]
75#[unsafe(no_mangle)]
76pub unsafe extern "C" fn patch_seq_signal_sigusr2(stack: Stack) -> Stack {
77    unsafe { push(stack, Value::Int(libc::SIGUSR2 as i64)) }
78}
79
80/// Get SIGCHLD constant (child status change)
81///
82/// Stack effect: ( -- Int )
83///
84/// # Safety
85/// Stack pointer must be valid.
86#[cfg(unix)]
87#[unsafe(no_mangle)]
88pub unsafe extern "C" fn patch_seq_signal_sigchld(stack: Stack) -> Stack {
89    unsafe { push(stack, Value::Int(libc::SIGCHLD as i64)) }
90}
91
92/// Get SIGALRM constant (alarm clock)
93///
94/// Stack effect: ( -- Int )
95///
96/// # Safety
97/// Stack pointer must be valid.
98#[cfg(unix)]
99#[unsafe(no_mangle)]
100pub unsafe extern "C" fn patch_seq_signal_sigalrm(stack: Stack) -> Stack {
101    unsafe { push(stack, Value::Int(libc::SIGALRM as i64)) }
102}
103
104/// Get SIGCONT constant (continue)
105///
106/// Stack effect: ( -- Int )
107///
108/// # Safety
109/// Stack pointer must be valid.
110#[cfg(unix)]
111#[unsafe(no_mangle)]
112pub unsafe extern "C" fn patch_seq_signal_sigcont(stack: Stack) -> Stack {
113    unsafe { push(stack, Value::Int(libc::SIGCONT as i64)) }
114}
115
116// Non-Unix stubs for signal constants (return 0)
117// Safety: Stack pointer must be valid for all functions below.
118
119/// # Safety
120/// Stack pointer must be valid.
121#[cfg(not(unix))]
122#[unsafe(no_mangle)]
123pub unsafe extern "C" fn patch_seq_signal_sigint(stack: Stack) -> Stack {
124    unsafe { push(stack, Value::Int(0)) }
125}
126
127/// # Safety
128/// Stack pointer must be valid.
129#[cfg(not(unix))]
130#[unsafe(no_mangle)]
131pub unsafe extern "C" fn patch_seq_signal_sigterm(stack: Stack) -> Stack {
132    unsafe { push(stack, Value::Int(0)) }
133}
134
135/// # Safety
136/// Stack pointer must be valid.
137#[cfg(not(unix))]
138#[unsafe(no_mangle)]
139pub unsafe extern "C" fn patch_seq_signal_sighup(stack: Stack) -> Stack {
140    unsafe { push(stack, Value::Int(0)) }
141}
142
143/// # Safety
144/// Stack pointer must be valid.
145#[cfg(not(unix))]
146#[unsafe(no_mangle)]
147pub unsafe extern "C" fn patch_seq_signal_sigpipe(stack: Stack) -> Stack {
148    unsafe { push(stack, Value::Int(0)) }
149}
150
151/// # Safety
152/// Stack pointer must be valid.
153#[cfg(not(unix))]
154#[unsafe(no_mangle)]
155pub unsafe extern "C" fn patch_seq_signal_sigusr1(stack: Stack) -> Stack {
156    unsafe { push(stack, Value::Int(0)) }
157}
158
159/// # Safety
160/// Stack pointer must be valid.
161#[cfg(not(unix))]
162#[unsafe(no_mangle)]
163pub unsafe extern "C" fn patch_seq_signal_sigusr2(stack: Stack) -> Stack {
164    unsafe { push(stack, Value::Int(0)) }
165}
166
167/// # Safety
168/// Stack pointer must be valid.
169#[cfg(not(unix))]
170#[unsafe(no_mangle)]
171pub unsafe extern "C" fn patch_seq_signal_sigchld(stack: Stack) -> Stack {
172    unsafe { push(stack, Value::Int(0)) }
173}
174
175/// # Safety
176/// Stack pointer must be valid.
177#[cfg(not(unix))]
178#[unsafe(no_mangle)]
179pub unsafe extern "C" fn patch_seq_signal_sigalrm(stack: Stack) -> Stack {
180    unsafe { push(stack, Value::Int(0)) }
181}
182
183/// # Safety
184/// Stack pointer must be valid.
185#[cfg(not(unix))]
186#[unsafe(no_mangle)]
187pub unsafe extern "C" fn patch_seq_signal_sigcont(stack: Stack) -> Stack {
188    unsafe { push(stack, Value::Int(0)) }
189}