summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRich Felker <dalias@aerifal.cx>2011-06-30 12:44:48 -0400
committerRich Felker <dalias@aerifal.cx>2011-06-30 12:44:48 -0400
commita0b56b947a5a8a58fe2accea7f6d9ee927d70ad4 (patch)
tree8080301f6ee6645bd39d390422956452bc98b5df
parent7640497f5f28ddb4aa13528676a99b603320f47e (diff)
downloadmusl-a0b56b947a5a8a58fe2accea7f6d9ee927d70ad4.tar.gz
add and consolidate nasty stdio_ext junk
hopefully this resolves the rest of the issues with hideously nonportable hacks in programs that use gnulib.
-rw-r--r--include/stdio_ext.h27
-rw-r--r--src/stdio/__fpending.c6
-rw-r--r--src/stdio/ext.c57
-rw-r--r--src/stdio/fpurge.c11
4 files changed, 84 insertions, 17 deletions
diff --git a/include/stdio_ext.h b/include/stdio_ext.h
new file mode 100644
index 00000000..b090cab6
--- /dev/null
+++ b/include/stdio_ext.h
@@ -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
diff --git a/src/stdio/__fpending.c b/src/stdio/__fpending.c
deleted file mode 100644
index a4334e23..00000000
--- a/src/stdio/__fpending.c
+++ /dev/null
@@ -1,6 +0,0 @@
-#include "stdio_impl.h"
-
-size_t __fpending(FILE *f)
-{
- return f->wend ? f->wpos - f->wbase : 0;
-}
diff --git a/src/stdio/ext.c b/src/stdio/ext.c
new file mode 100644
index 00000000..d5a403b6
--- /dev/null
+++ b/src/stdio/ext.c
@@ -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);
diff --git a/src/stdio/fpurge.c b/src/stdio/fpurge.c
deleted file mode 100644
index a9e98e7b..00000000
--- a/src/stdio/fpurge.c
+++ /dev/null
@@ -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);