Logo
Explore Help
Sign In
fluencelabs/musl
1
0
Fork 0
You've already forked musl
mirror of https://github.com/fluencelabs/musl synced 2025-06-06 11:31:35 +00:00
Code Issues Projects Releases Wiki Activity
musl/src/stdio/__stdio_exit.c

24 lines
506 B
C
Raw Normal View History

stdio: handle file position correctly at program exit for seekable files, posix imposed requirements on the offset of the underlying open file description after a stream is closed. this was correctly handled (as a side effect of the unconditional fflush call) when streams were explicitly closed by fclose, but was not handled correctly at program exit time, where fflush(0) was being used. the weak symbol hackery is to pull in __stdio_exit if either of __toread or __towrite is used, but avoid calling it twice so we don't have to keep extra state. the new __stdio_exit is a streamlined fflush variant that avoids performing any unnecessary operations and which never unlocks the files or open file list, so we can be sure no other threads write new data to a stream's buffer after it's already flushed.
2012-06-19 01:27:26 -04:00
#include "stdio_impl.h"
static FILE *const dummy_file = 0;
weak_alias(dummy_file, __stdin_used);
weak_alias(dummy_file, __stdout_used);
weak_alias(dummy_file, __stderr_used);
static void close_file(FILE *f)
{
if (!f) return;
FLOCK(f);
if (f->wpos > f->wbase) f->write(f, 0, 0);
if (f->rpos < f->rend) f->seek(f, f->rpos-f->rend, SEEK_CUR);
}
void __stdio_exit(void)
{
FILE *f;
OFLLOCK();
for (f=libc.ofl_head; f; f=f->next) close_file(f);
close_file(__stdin_used);
close_file(__stdout_used);
}
Reference in New Issue Copy Permalink
Powered by Gitea Version: 1.23.8 Page: 58ms Template: 2ms
English
Bahasa Indonesia Deutsch English Español Français Gaeilge Italiano Latviešu Magyar nyelv Nederlands Polski Português de Portugal Português do Brasil Suomi Svenska Türkçe Čeština Ελληνικά Български Русский Українська فارسی മലയാളം 日本語 简体中文 繁體中文(台灣) 繁體中文(香港) 한국어
Licenses API