add and consolidate nasty stdio_ext junk

hopefully this resolves the rest of the issues with hideously
nonportable hacks in programs that use gnulib.
This commit is contained in:
Rich Felker 2011-06-30 12:44:48 -04:00
parent 7640497f5f
commit a0b56b947a
4 changed files with 84 additions and 17 deletions

27
include/stdio_ext.h Normal file
View File

@ -0,0 +1,27 @@
#ifndef _STDIO_EXT_H
#define _STDIO_EXT_H
#ifdef __cplusplus
extern "C" {
#endif
#define FSETLOCKING_QUERY 0
#define FSETLOCKING_INTERNAL 1
#define FSETLOCKING_BYCALLER 2
void _flushlbf(void);
int __fsetlocking(FILE *, int);
int __fwriting(FILE *);
int __freading(FILE *);
int __freadable(FILE *);
int __fwritable(FILE *);
int __flbf(FILE *);
size_t __fbufsize(FILE *);
size_t __fpending(FILE *);
int __fpurge(FILE *);
#ifdef __cplusplus
}
#endif
#endif

View File

@ -1,6 +0,0 @@
#include "stdio_impl.h"
size_t __fpending(FILE *f)
{
return f->wend ? f->wpos - f->wbase : 0;
}

57
src/stdio/ext.c Normal file
View File

@ -0,0 +1,57 @@
#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->wend > f->wpos;
}
int __freading(FILE *f)
{
return f->rend > f->rpos;
}
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);

View File

@ -1,11 +0,0 @@
#define _GNU_SOURCE
#include "stdio_impl.h"
int __fpurge(FILE *f)
{
f->wpos = f->wbase = f->wend = 0;
f->rpos = f->rend = 0;
return 0;
}
weak_alias(__fpurge, fpurge);