X-Git-Url: http://nsz.repo.hu/git/?a=blobdiff_plain;ds=sidebyside;f=src%2Fstdio%2Fperror.c;h=d0943f26a938bd9dad153c1d64dd88f643c31097;hb=0847902ab99065a48f9bd3729b6e676288dfd69e;hp=e4637c8aa949b1bd21117dfa2f5d7513c2d663fc;hpb=0b44a0315b47dd8eced9f3b7f31580cf14bbfc01;p=musl diff --git a/src/stdio/perror.c b/src/stdio/perror.c index e4637c8a..d0943f26 100644 --- a/src/stdio/perror.c +++ b/src/stdio/perror.c @@ -5,23 +5,26 @@ void perror(const char *msg) { -#if 1 - if (msg) fprintf(stderr, "%s: %m\n", msg, strerror(errno)); - else fprintf(stderr, "%m\n"); -#else FILE *f = stderr; 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) { - __fwritex(msg, strlen(msg), f); - __putc_unlocked(':', f); - __putc_unlocked(' ', f); + if (msg && *msg) { + fwrite(msg, strlen(msg), 1, f); + fputc(':', f); + fputc(' ', f); } - __fwritex(errstr, strlen(errstr), f); - __putc_unlocked('\n', f); + fwrite(errstr, strlen(errstr), 1, f); + fputc('\n', f); + + f->mode = old_mode; + f->locale = old_locale; FUNLOCK(f); -#endif }