77// SPDX-License-Identifier: MIT
88//
99
10- use gettextrs:: { bind_textdomain_codeset, setlocale, textdomain, LocaleCategory } ;
11- use plib:: PROJECT_NAME ;
12-
13- #[ cfg( target_os = "macos" ) ]
14- const SIGLIST : [ ( & str , u32 ) ; 31 ] = [
15- ( "HUP" , 1 ) ,
16- ( "INT" , 2 ) ,
17- ( "QUIT" , 3 ) ,
18- ( "ILL" , 4 ) ,
19- ( "TRAP" , 5 ) ,
20- ( "ABRT" , 6 ) ,
21- ( "EMT" , 7 ) ,
22- ( "FPE" , 8 ) ,
23- ( "KILL" , 9 ) ,
24- ( "BUS" , 10 ) ,
25- ( "SEGV" , 11 ) ,
26- ( "SYS" , 12 ) ,
27- ( "PIPE" , 13 ) ,
28- ( "ALRM" , 14 ) ,
29- ( "TERM" , 15 ) ,
30- ( "URG" , 16 ) ,
31- ( "STOP" , 17 ) ,
32- ( "TSTP" , 18 ) ,
33- ( "CONT" , 19 ) ,
34- ( "CHLD" , 20 ) ,
35- ( "TTIN" , 21 ) ,
36- ( "TTOU" , 22 ) ,
37- ( "IO" , 23 ) ,
38- ( "XCPU" , 24 ) ,
39- ( "XFSZ" , 25 ) ,
40- ( "VTALRM" , 26 ) ,
41- ( "PROF" , 27 ) ,
42- ( "WINCH" , 28 ) ,
43- ( "INFO" , 29 ) ,
44- ( "USR1" , 30 ) ,
45- ( "USR2" , 31 ) ,
46- ] ;
47-
48- #[ cfg( target_os = "linux" ) ]
49- const SIGLIST : [ ( & str , u32 ) ; 32 ] = [
50- ( "HUP" , 1 ) ,
51- ( "INT" , 2 ) ,
52- ( "QUIT" , 3 ) ,
53- ( "ILL" , 4 ) ,
54- ( "TRAP" , 5 ) ,
55- ( "ABRT" , 6 ) ,
56- ( "IOT" , 6 ) ,
57- ( "BUS" , 7 ) ,
58- ( "FPE" , 8 ) ,
59- ( "KILL" , 9 ) ,
60- ( "USR1" , 10 ) ,
61- ( "SEGV" , 11 ) ,
62- ( "USR2" , 12 ) ,
63- ( "PIPE" , 13 ) ,
64- ( "ALRM" , 14 ) ,
65- ( "TERM" , 15 ) ,
66- ( "STKFLT" , 16 ) ,
67- ( "CHLD" , 17 ) ,
68- ( "CONT" , 18 ) ,
69- ( "STOP" , 19 ) ,
70- ( "TSTP" , 20 ) ,
71- ( "TTIN" , 21 ) ,
72- ( "TTOU" , 22 ) ,
73- ( "URG" , 23 ) ,
74- ( "XCPU" , 24 ) ,
75- ( "XFSZ" , 25 ) ,
76- ( "VTALRM" , 26 ) ,
77- ( "PROF" , 27 ) ,
78- ( "WINCH" , 28 ) ,
79- ( "IO" , 29 ) ,
80- ( "PWR" , 30 ) ,
81- ( "SYS" , 31 ) ,
82- ] ;
83-
84- fn siglist_get ( name : & str ) -> Option < u32 > {
85- for ( signame, signo) in SIGLIST . iter ( ) {
86- if * signame == name {
87- return Some ( * signo) ;
88- }
89- }
10+ mod signal;
9011
91- None
92- }
12+ use gettextrs:: { bind_textdomain_codeset, setlocale, textdomain, LocaleCategory } ;
9313
94- fn lookup_signum ( signame : & str ) -> Result < u32 , & ' static str > {
95- if signame == "0" {
96- Ok ( 0 )
97- } else {
98- match siglist_get ( signame. to_uppercase ( ) . as_str ( ) ) {
99- Some ( sig_no) => Ok ( sig_no) ,
100- None => Err ( "Unknown signal name" ) ,
101- }
102- }
103- }
14+ use crate :: signal:: { list_signals, lookup_signum} ;
10415
10516enum ConfigMode {
106- Signal ( u32 ) ,
17+ Signal ( i32 ) ,
10718 List ,
10819}
10920
@@ -114,7 +25,7 @@ struct Config {
11425
11526fn parse_cmdline ( ) -> Result < Config , & ' static str > {
11627 let mut pids = Vec :: new ( ) ;
117- let mut mode = ConfigMode :: Signal ( libc:: SIGTERM as u32 ) ;
28+ let mut mode = ConfigMode :: Signal ( libc:: SIGTERM ) ;
11829 let mut in_args = true ;
11930 let mut in_s_arg = false ;
12031 for arg in std:: env:: args ( ) . skip ( 1 ) {
@@ -130,7 +41,7 @@ fn parse_cmdline() -> Result<Config, &'static str> {
13041 } else if arg == "--" {
13142 in_args = false ;
13243 } else if let Some ( st) = arg. strip_prefix ( "-" ) {
133- let sig_no = match st. parse :: < u32 > ( ) {
44+ let sig_no: i32 = match st. parse ( ) {
13445 Ok ( signo) => signo,
13546 Err ( _) => lookup_signum ( st) ?,
13647 } ;
@@ -157,19 +68,7 @@ fn parse_cmdline() -> Result<Config, &'static str> {
15768 Ok ( Config { mode, pids } )
15869}
15970
160- fn list_signals ( ) -> u32 {
161- let mut output = String :: new ( ) ;
162- for ( name, _) in SIGLIST . iter ( ) {
163- output. push_str ( name) ;
164- output. push ( ' ' ) ;
165- }
166-
167- println ! ( "{}" , output) ;
168-
169- 0
170- }
171-
172- fn send_signal ( prog_cfg : & Config , sig_no : u32 ) -> u32 {
71+ fn send_signal ( prog_cfg : & Config , sig_no : i32 ) -> u32 {
17372 let mut exit_code = 0 ;
17473
17574 for pid in & prog_cfg. pids {
@@ -186,13 +85,16 @@ fn send_signal(prog_cfg: &Config, sig_no: u32) -> u32 {
18685
18786fn main ( ) -> Result < ( ) , Box < dyn std:: error:: Error > > {
18887 setlocale ( LocaleCategory :: LcAll , "" ) ;
189- textdomain ( PROJECT_NAME ) ?;
190- bind_textdomain_codeset ( PROJECT_NAME , "UTF-8" ) ?;
88+ textdomain ( env ! ( " PROJECT_NAME" ) ) ?;
89+ bind_textdomain_codeset ( env ! ( " PROJECT_NAME" ) , "UTF-8" ) ?;
19190
19291 let prog_cfg = parse_cmdline ( ) ?;
19392
19493 let exit_code = match prog_cfg. mode {
195- ConfigMode :: List => list_signals ( ) ,
94+ ConfigMode :: List => {
95+ list_signals ( ) ;
96+ 0
97+ }
19698 ConfigMode :: Signal ( sig_no) => send_signal ( & prog_cfg, sig_no) ,
19799 } ;
198100
0 commit comments