diff options
Diffstat (limited to 'main/musl/0010-simplify-refactor-fflush-and-make-fflush_unlocked-an.patch')
-rw-r--r-- | main/musl/0010-simplify-refactor-fflush-and-make-fflush_unlocked-an.patch | 102 |
1 files changed, 0 insertions, 102 deletions
diff --git a/main/musl/0010-simplify-refactor-fflush-and-make-fflush_unlocked-an.patch b/main/musl/0010-simplify-refactor-fflush-and-make-fflush_unlocked-an.patch deleted file mode 100644 index ba6483bb78..0000000000 --- a/main/musl/0010-simplify-refactor-fflush-and-make-fflush_unlocked-an.patch +++ /dev/null @@ -1,102 +0,0 @@ -From c002668eb0352e619ea7064e4940b397b4a6e68d Mon Sep 17 00:00:00 2001 -From: Rich Felker <dalias@aerifal.cx> -Date: Sun, 18 Sep 2016 21:45:47 -0400 -Subject: [PATCH 10/11] simplify/refactor fflush and make fflush_unlocked an - alias for fflush - -previously, fflush_unlocked was an alias for an internal backend that -was called by fflush, either for its argument or in a loop for each -file if a null pointer was passed. since the logic for the latter was -in the main fflush function, fflush_unlocked crashed when passed a -null pointer, rather than flushing all open files. since -fflush_unlocked is not a standard function and has no specification, -it's not clear whether it should be expected to accept null pointers -like fflush does, but a reasonable argument could be made that it -should. - -this patch eliminates the helper function, simplifying fflush, and -makes fflush_unlocked an alias for fflush, which is valid because the -two functions agree in their behavior in all cases where their -behavior is defined (the unlocked version has undefined behavior if -another thread could hold locks). ---- - src/stdio/fflush.c | 53 +++++++++++++++++++++++------------------------------ - 1 file changed, 23 insertions(+), 30 deletions(-) - -diff --git a/src/stdio/fflush.c b/src/stdio/fflush.c -index 3f462c8..c288106 100644 ---- a/src/stdio/fflush.c -+++ b/src/stdio/fflush.c -@@ -1,11 +1,30 @@ - #include "stdio_impl.h" - --static int __fflush_unlocked(FILE *f) -+/* stdout.c will override this if linked */ -+static FILE *volatile dummy = 0; -+weak_alias(dummy, __stdout_used); -+ -+int fflush(FILE *f) - { -+ if (!f) { -+ int r = __stdout_used ? fflush(__stdout_used) : 0; -+ -+ for (f=*__ofl_lock(); f; f=f->next) -+ if (f->wpos > f->wbase) r |= fflush(f); -+ __ofl_unlock(); -+ -+ return r; -+ } -+ -+ FLOCK(f); -+ - /* If writing, flush output */ - if (f->wpos > f->wbase) { - f->write(f, 0, 0); -- if (!f->wpos) return EOF; -+ if (!f->wpos) { -+ FUNLOCK(f); -+ return EOF; -+ } - } - - /* If reading, sync position, per POSIX */ -@@ -15,34 +34,8 @@ static int __fflush_unlocked(FILE *f) - f->wpos = f->wbase = f->wend = 0; - f->rpos = f->rend = 0; - -+ FUNLOCK(f); - return 0; - } - --/* stdout.c will override this if linked */ --static FILE *volatile dummy = 0; --weak_alias(dummy, __stdout_used); -- --int fflush(FILE *f) --{ -- int r; -- -- if (f) { -- FLOCK(f); -- r = __fflush_unlocked(f); -- FUNLOCK(f); -- return r; -- } -- -- r = __stdout_used ? fflush(__stdout_used) : 0; -- -- for (f=*__ofl_lock(); f; f=f->next) { -- FLOCK(f); -- if (f->wpos > f->wbase) r |= __fflush_unlocked(f); -- FUNLOCK(f); -- } -- __ofl_unlock(); -- -- return r; --} -- --weak_alias(__fflush_unlocked, fflush_unlocked); -+weak_alias(fflush, fflush_unlocked); --- -2.10.1 - |