88
99#include "common.h"
1010
11- #define ENTRY (e ) { (e), #e }
12- #define ENTRY_RT (e , n ) (struct signal_entry){ (e), (n) };
11+ #define ENTRY (e ) [e] = #e
1312
14- struct signal_entry {
15- int number ;
16- char * name ;
17- } static sig [] = {
13+ static char sig [_NSIG ][16 ] = {
1814 ENTRY (SIGHUP ),
1915 ENTRY (SIGINT ),
2016 ENTRY (SIGQUIT ),
@@ -50,57 +46,49 @@ struct signal_entry {
5046 ENTRY (SIGSYS ),
5147};
5248
53- static void print_signal (struct signal_entry * s )
49+
50+ static void sig_rt_init (void )
51+ {
52+ int i ;
53+
54+ for (i = SIGRTMIN ; i <= SIGRTMAX ; i ++ )
55+ snprintf (sig [i ], sizeof (sig [i ]), "SIGRT + %d" , i - SIGRTMIN );
56+ }
57+
58+ static void print_signal (int number )
5459{
60+ if (sig [number ][0 ] == '\0' ) {
61+ log ("unknown signal %d\n" , number );
62+ return ;
63+ }
64+
5565#if __GLIBC_PREREQ (2 , 32 )
56- log ("%-11s %2d %-25s %-8s %-25s\n" , s -> name , s -> number ,
57- strsignal (s -> number ), sigabbrev_np (s -> number ), sigdescr_np (s -> number ));
66+ log ("%-11s %2d %-25s %-8s %-25s\n" , sig [ number ], number ,
67+ strsignal (number ), sigabbrev_np (number ), sigdescr_np (number ));
5868#else
59- log ("%-11s %2d %-25s\n" , s -> name , s -> number , strsignal (s -> number ));
60-
69+ log ("%-11s %2d %-25s\n" , sig [number ], number , strsignal (number ));
6170#endif
6271}
6372
6473int main (int argc , char * argv [])
6574{
66- /*
67- * SIGRTMIN and SIGRTMAX are defined as __libc_current_sigrtmin()
68- * and __libc_current_sigrtmax() respecively hence separate sig_rt
69- * array.
70- */
71- struct signal_entry sig_rt [SIGRTMAX - SIGRTMIN + 1 ];
72- struct signal_entry * e ;
75+ int i ;
7376 char * endptr ;
7477 long val ;
7578
76- for (e = ARRAY_BEGIN (sig_rt ); e < ARRAY_END (sig_rt ); e ++ ) {
77- char * name ;
78-
79- /* yes, this is a leak */
80- name = malloc (32 );
81-
82- snprintf (name , 32 , "SIGRT + %td" , e - ARRAY_BEGIN (sig_rt ));
83- * e = ENTRY_RT (SIGRTMIN + e - ARRAY_BEGIN (sig_rt ), name );
84- }
79+ sig_rt_init ();
8580
8681 if (argc == 1 ) {
87- for (e = ARRAY_BEGIN (sig ); e < ARRAY_END (sig ); e ++ )
88- print_signal (e );
89-
90- for (e = ARRAY_BEGIN (sig_rt ); e < ARRAY_END (sig_rt ); e ++ )
91- print_signal (e );
82+ for (i = 0 ; i < ARRAY_SIZE (sig ); i ++ )
83+ print_signal (i );
9284
9385 return 0 ;
9486 }
9587
9688 if (argv [1 ][0 ] == 'S' ) {
97- for (e = ARRAY_BEGIN (sig ); e < ARRAY_END (sig ); e ++ )
98- if (!strncmp (e -> name , argv [1 ], strlen (argv [1 ])))
99- print_signal (e );
100-
101- for (e = ARRAY_BEGIN (sig_rt ); e < ARRAY_END (sig_rt ); e ++ )
102- if (!strncmp (e -> name , argv [1 ], strlen (argv [1 ])))
103- print_signal (e );
89+ for (i = 0 ; i < ARRAY_SIZE (sig ); i ++ )
90+ if (!strncmp (sig [i ], argv [1 ], strlen (argv [1 ])))
91+ print_signal (i );
10492
10593 return 0 ;
10694 }
@@ -113,16 +101,9 @@ int main(int argc, char *argv[])
113101 if (endptr == argv [1 ])
114102 die ("not a number: %s\n" , argv [1 ]);
115103
116- for (e = ARRAY_BEGIN (sig ); e < ARRAY_END (sig ); e ++ ) {
117- if (e -> number == val ) {
118- print_signal (e );
119- return 0 ;
120- }
121- }
122-
123- for (e = ARRAY_BEGIN (sig_rt ); e < ARRAY_END (sig_rt ); e ++ ) {
124- if (e -> number == val ) {
125- print_signal (e );
104+ for (i = 0 ; i < ARRAY_SIZE (sig ); i ++ ) {
105+ if (i == val ) {
106+ print_signal (i );
126107 return 0 ;
127108 }
128109 }
0 commit comments