From cff4b910ab210e5c35f768c75c4562b3ae3e86f2 Mon Sep 17 00:00:00 2001 From: Rich Felker Date: Thu, 30 Aug 2018 00:08:16 -0400 Subject: prevent perror from clobbering stderr's orientation this requirement is specified by POSIX. --- src/stdio/perror.c | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/src/stdio/perror.c b/src/stdio/perror.c index fdcb4d71..d0943f26 100644 --- a/src/stdio/perror.c +++ b/src/stdio/perror.c @@ -9,6 +9,11 @@ void perror(const char *msg) char *errstr = strerror(errno); FLOCK(f); + + /* Save stderr's orientation and encoding rule, since perror is not + * permitted to change them. */ + void *old_locale = f->locale; + int old_mode = f->mode; if (msg && *msg) { fwrite(msg, strlen(msg), 1, f); @@ -18,5 +23,8 @@ void perror(const char *msg) fwrite(errstr, strlen(errstr), 1, f); fputc('\n', f); + f->mode = old_mode; + f->locale = old_locale; + FUNLOCK(f); } -- cgit v1.2.1