xref: /aosp_15_r20/external/musl/src/signal/psignal.c (revision c9945492fdd68bbe62686c5b452b4dc1be3f8453)
1*c9945492SAndroid Build Coastguard Worker #include "stdio_impl.h"
2*c9945492SAndroid Build Coastguard Worker #include <string.h>
3*c9945492SAndroid Build Coastguard Worker #include <signal.h>
4*c9945492SAndroid Build Coastguard Worker #include <errno.h>
5*c9945492SAndroid Build Coastguard Worker 
psignal(int sig,const char * msg)6*c9945492SAndroid Build Coastguard Worker void psignal(int sig, const char *msg)
7*c9945492SAndroid Build Coastguard Worker {
8*c9945492SAndroid Build Coastguard Worker 	FILE *f = stderr;
9*c9945492SAndroid Build Coastguard Worker 	char *s = strsignal(sig);
10*c9945492SAndroid Build Coastguard Worker 
11*c9945492SAndroid Build Coastguard Worker 	FLOCK(f);
12*c9945492SAndroid Build Coastguard Worker 
13*c9945492SAndroid Build Coastguard Worker 	/* Save stderr's orientation and encoding rule, since psignal is not
14*c9945492SAndroid Build Coastguard Worker 	 * permitted to change them. Save errno and restore it if there is no
15*c9945492SAndroid Build Coastguard Worker 	 * error since fprintf might change it even on success but psignal is
16*c9945492SAndroid Build Coastguard Worker 	 * not permitted to do so. */
17*c9945492SAndroid Build Coastguard Worker 	void *old_locale = f->locale;
18*c9945492SAndroid Build Coastguard Worker 	int old_mode = f->mode;
19*c9945492SAndroid Build Coastguard Worker 	int old_errno = errno;
20*c9945492SAndroid Build Coastguard Worker 
21*c9945492SAndroid Build Coastguard Worker 	if (fprintf(f, "%s%s%s\n", msg?msg:"", msg?": ":"", s)>=0)
22*c9945492SAndroid Build Coastguard Worker 		errno = old_errno;
23*c9945492SAndroid Build Coastguard Worker 	f->mode = old_mode;
24*c9945492SAndroid Build Coastguard Worker 	f->locale = old_locale;
25*c9945492SAndroid Build Coastguard Worker 
26*c9945492SAndroid Build Coastguard Worker 	FUNLOCK(f);
27*c9945492SAndroid Build Coastguard Worker }
28