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 Workervoid 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