From d36cf0e4ee935312496841df79e102c5b8e5b05b Mon Sep 17 00:00:00 2001 From: wangmengc Date: Tue, 19 Sep 2023 14:13:26 +0800 Subject: [PATCH] Added macros and signal callbacks for waiting child functions --- bash-5.1/r_jobs/src/lib.rs | 39 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 39 insertions(+) diff --git a/bash-5.1/r_jobs/src/lib.rs b/bash-5.1/r_jobs/src/lib.rs index 8fa110b4..c6614b0c 100644 --- a/bash-5.1/r_jobs/src/lib.rs +++ b/bash-5.1/r_jobs/src/lib.rs @@ -3740,6 +3740,45 @@ pub unsafe extern "C" fn kill_pid(mut pid: pid_t, mut sig: c_int, mut group: c return result; } +unsafe extern "C" fn sigchld_handler(mut sig: c_int) { + let mut n: c_int = 0; + let mut oerrno: c_int = 0; + + oerrno = errno!(); + sigchld += 1; + n = 0 ; + if queue_sigchld == 0 { + n = waitchld(-1, 0 ); + } + errno!() = oerrno; + return; +} + + +#[macro_export] +macro_rules! sh_longjmp { + ($x:expr,$n:expr) => { + siglongjmp($x, $n as c_int) + }; +} + + +pub const EINVAL:i32 = 22; +pub const EINTR:i32 = 22; + +#[macro_export] +macro_rules! IMPOSSIBLE_TRAP_HANDLER { + () => { + initialize_traps as *mut SigHandler + }; +} + +#[macro_export] +macro_rules! IGNORE_SIG { + () => { + SIG_IGN!() + }; +} unsafe extern "C" fn waitchld(mut wpid: pid_t, mut block: c_int) -> c_int { let mut status: WAIT = 0; let mut child: *mut PROCESS = 0 as *mut PROCESS; -- Gitee