use alt signal stack when present for implementation-internal signals
[musl] / src / stdio / fflush.c
index bf1e843..b009437 100644 (file)
@@ -3,15 +3,18 @@
 /* stdout.c will override this if linked */
 static FILE *volatile dummy = 0;
 weak_alias(dummy, __stdout_used);
+weak_alias(dummy, __stderr_used);
 
 int fflush(FILE *f)
 {
        if (!f) {
-               int r = __stdout_used ? fflush(__stdout_used) : 0;
+               int r = 0;
+               if (__stdout_used) r |= fflush(__stdout_used);
+               if (__stderr_used) r |= fflush(__stderr_used);
 
                for (f=*__ofl_lock(); f; f=f->next) {
                        FLOCK(f);
-                       if (f->wpos > f->wbase) r |= fflush(f);
+                       if (f->wpos != f->wbase) r |= fflush(f);
                        FUNLOCK(f);
                }
                __ofl_unlock();
@@ -22,7 +25,7 @@ int fflush(FILE *f)
        FLOCK(f);
 
        /* If writing, flush output */
-       if (f->wpos > f->wbase) {
+       if (f->wpos != f->wbase) {
                f->write(f, 0, 0);
                if (!f->wpos) {
                        FUNLOCK(f);
@@ -31,7 +34,7 @@ int fflush(FILE *f)
        }
 
        /* If reading, sync position, per POSIX */
-       if (f->rpos < f->rend) f->seek(f, f->rpos-f->rend, SEEK_CUR);
+       if (f->rpos != f->rend) f->seek(f, f->rpos-f->rend, SEEK_CUR);
 
        /* Clear read and write modes */
        f->wpos = f->wbase = f->wend = 0;