Fix MODE=tinylinux build

This commit is contained in:
Justine Tunney 2024-07-06 01:39:15 -07:00
parent 8c645fa1ee
commit 6be030cd7c
No known key found for this signature in database
GPG key ID: BE714B4575D6E328
8 changed files with 77 additions and 98 deletions

View file

@ -16,8 +16,10 @@
TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
PERFORMANCE OF THIS SOFTWARE.
*/
#include "libc/stdio/fflush.internal.h"
#include "libc/stdio/internal.h"
#include "libc/stdio/stdio.h"
#include "libc/str/str.h"
#include "libc/thread/thread.h"
/**
@ -26,3 +28,39 @@
void flockfile(FILE *f) {
pthread_mutex_lock(&f->lock);
}
void(__fflush_lock)(void) {
pthread_mutex_lock(&__fflush_lock_obj);
}
void(__fflush_unlock)(void) {
pthread_mutex_unlock(&__fflush_lock_obj);
}
static void __stdio_fork_prepare(void) {
FILE *f;
__fflush_lock();
for (int i = 0; i < __fflush.handles.i; ++i)
if ((f = __fflush.handles.p[i]))
pthread_mutex_lock(&f->lock);
}
static void __stdio_fork_parent(void) {
FILE *f;
for (int i = __fflush.handles.i; i--;)
if ((f = __fflush.handles.p[i]))
pthread_mutex_unlock(&f->lock);
__fflush_unlock();
}
static void __stdio_fork_child(void) {
FILE *f;
for (int i = __fflush.handles.i; i--;)
if ((f = __fflush.handles.p[i]))
f->lock = (pthread_mutex_t)PTHREAD_RECURSIVE_MUTEX_INITIALIZER_NP;
pthread_mutex_init(&__fflush_lock_obj, 0);
}
__attribute__((__constructor__(60))) static textstartup void stdioinit(void) {
pthread_atfork(__stdio_fork_prepare, __stdio_fork_parent, __stdio_fork_child);
}