From: Rich Felker Date: Thu, 30 Aug 2018 04:08:16 +0000 (-0400) Subject: prevent perror from clobbering stderr's orientation X-Git-Url: http://nsz.repo.hu/git/?a=commitdiff_plain;h=cff4b910ab210e5c35f768c75c4562b3ae3e86f2;p=musl prevent perror from clobbering stderr's orientation this requirement is specified by POSIX. --- 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); }