update ctype data to unicode 12.1.0
[musl] / src / stdio / fflush.c
index c288106..b009437 100644 (file)
@@ -3,14 +3,20 @@
 /* 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)
-                       if (f->wpos > f->wbase) r |= fflush(f);
+               for (f=*__ofl_lock(); f; f=f->next) {
+                       FLOCK(f);
+                       if (f->wpos != f->wbase) r |= fflush(f);
+                       FUNLOCK(f);
+               }
                __ofl_unlock();
 
                return r;
@@ -19,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);
@@ -28,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;