diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/stdio/perror.c | 8 |
1 files changed, 8 insertions, 0 deletions
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); } |