mirror of
https://github.com/fluencelabs/musl
synced 2025-05-21 19:51:31 +00:00
the old behavior was to only consider a stream to be "reading" or "writing" if it had buffered, unread/unwritten data. this reportedly differs from the traditional behavior of these functions, which is essentially to return true as much as possible without creating the possibility that both __freading and __fwriting could return true. gnulib expects __fwriting to return true as soon as a file is opened write-only, and possibly expects other cases that depend on the traditional behavior. and since these functions exist mostly for gnulib (does anything else use them??), they should match the expected behavior to avoid even more ugly hacks and workarounds...
58 lines
717 B
C
58 lines
717 B
C
#define _GNU_SOURCE
|
|
#include "stdio_impl.h"
|
|
#include <stdio_ext.h>
|
|
|
|
void _flushlbf(void)
|
|
{
|
|
fflush(0);
|
|
}
|
|
|
|
int __fsetlocking(FILE *f, int type)
|
|
{
|
|
return 0;
|
|
}
|
|
|
|
int __fwriting(FILE *f)
|
|
{
|
|
return (f->flags & F_NORD) || f->wend;
|
|
}
|
|
|
|
int __freading(FILE *f)
|
|
{
|
|
return (f->flags & F_NOWR) || f->rend;
|
|
}
|
|
|
|
int __freadable(FILE *f)
|
|
{
|
|
return !(f->flags & F_NORD);
|
|
}
|
|
|
|
int __fwritable(FILE *f)
|
|
{
|
|
return !(f->flags & F_NOWR);
|
|
}
|
|
|
|
int __flbf(FILE *f)
|
|
{
|
|
return f->lbf >= 0;
|
|
}
|
|
|
|
size_t __fbufsize(FILE *f)
|
|
{
|
|
return f->buf_size;
|
|
}
|
|
|
|
size_t __fpending(FILE *f)
|
|
{
|
|
return f->wend ? f->wpos - f->wbase : 0;
|
|
}
|
|
|
|
int __fpurge(FILE *f)
|
|
{
|
|
f->wpos = f->wbase = f->wend = 0;
|
|
f->rpos = f->rend = 0;
|
|
return 0;
|
|
}
|
|
|
|
weak_alias(__fpurge, fpurge);
|