summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBruno Haible <bruno@clisp.org>2008-02-28 13:19:17 +0100
committerBruno Haible <bruno@clisp.org>2008-02-28 13:19:17 +0100
commit56690adc74a0b9d99a9a313947cf7515ce8a40db (patch)
tree36587eb217e251ada04c87f71d20f2d82d18d05d
parent25071b01c6398d51b7997772c7d04967c7f11d53 (diff)
downloadgnulib-56690adc74a0b9d99a9a313947cf7515ce8a40db.tar.gz
New module 'freadptr'.
-rw-r--r--ChangeLog8
-rwxr-xr-xMODULES.html.sh1
-rw-r--r--lib/freadptr.c54
-rw-r--r--lib/freadptr.h40
-rw-r--r--modules/freadptr23
5 files changed, 126 insertions, 0 deletions
diff --git a/ChangeLog b/ChangeLog
index d831fee9d8..ada44986e8 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,11 @@
+2008-02-28 Bruno Haible <bruno@clisp.org>
+
+ New module 'freadptr'.
+ * modules/freadptr: New file.
+ * lib/freadptr.h: New file.
+ * lib/freadptr.c: New file.
+ * MODULES.html.sh (File stream based Input/Output): Add freadptr.
+
2008-02-26 Karl Berry <karl@freefriends.org>
Sync from Libtool:
diff --git a/MODULES.html.sh b/MODULES.html.sh
index 0448a9d6a8..5f1dc7d2ae 100755
--- a/MODULES.html.sh
+++ b/MODULES.html.sh
@@ -2282,6 +2282,7 @@ func_all_modules ()
func_module freadable
func_module freadahead
func_module freading
+ func_module freadptr
func_module fwritable
func_module fwriting
func_module getpass
diff --git a/lib/freadptr.c b/lib/freadptr.c
new file mode 100644
index 0000000000..46e9dac9d5
--- /dev/null
+++ b/lib/freadptr.c
@@ -0,0 +1,54 @@
+/* Retrieve information about a FILE stream.
+ Copyright (C) 2007-2008 Free Software Foundation, Inc.
+
+ This program is free software: you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>. */
+
+#include <config.h>
+
+/* Specification. */
+#include "freadahead.h"
+
+const char *
+freadptr (FILE *fp)
+{
+ /* Keep this code in sync with freadahead! */
+#if defined _IO_ferror_unlocked /* GNU libc, BeOS */
+ return (const char *) fp->_IO_read_ptr;
+#elif defined __sferror /* FreeBSD, NetBSD, OpenBSD, MacOS X, Cygwin */
+ return (const char *) fp->_p;
+#elif defined _IOERR /* AIX, HP-UX, IRIX, OSF/1, Solaris, mingw */
+# if defined __sun && defined _LP64 /* Solaris/{SPARC,AMD64} 64-bit */
+# define fp_ ((struct { unsigned char *_ptr; \
+ unsigned char *_base; \
+ unsigned char *_end; \
+ long _cnt; \
+ int _file; \
+ unsigned int _flag; \
+ } *) fp)
+ return (const char *) fp_->_ptr;
+# else
+ return (const char *) fp->_ptr;
+# endif
+#elif defined __UCLIBC__ /* uClibc */
+# ifdef __STDIO_BUFFERS
+ return (const char *) fp->__bufpos;
+# else
+ return NULL;
+# endif
+#elif defined __QNX__ /* QNX */
+ return (const char *) fp->_Next;
+#else
+ #error "Please port gnulib freadptr.c to your platform! Look at the definition of getc, getc_unlocked on your system, then report this to bug-gnulib."
+#endif
+}
diff --git a/lib/freadptr.h b/lib/freadptr.h
new file mode 100644
index 0000000000..7697970703
--- /dev/null
+++ b/lib/freadptr.h
@@ -0,0 +1,40 @@
+/* Retrieve information about a FILE stream.
+ Copyright (C) 2007-2008 Free Software Foundation, Inc.
+
+ This program is free software: you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>. */
+
+#include <stddef.h>
+#include <stdio.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Assuming the stream STREAM is open for reading:
+ Return a pointer to the input buffer of STREAM.
+ If freadahead (STREAM) > 0, the result is a pointer to freadahead (STREAM)
+ bytes.
+ If freadahead (STREAM) == 0, the result is not usable; it may be NULL.
+ In this case, you should use getc (STREAM), fgetc (STREAM), or
+ fread (..., STREAM) to access the input from STREAM.
+
+ The resulting pointer becomes invalid upon any operation on STREAM.
+
+ STREAM must not be wide-character oriented. */
+
+extern const char * freadptr (FILE *stream);
+
+#ifdef __cplusplus
+}
+#endif
diff --git a/modules/freadptr b/modules/freadptr
new file mode 100644
index 0000000000..66c50bf560
--- /dev/null
+++ b/modules/freadptr
@@ -0,0 +1,23 @@
+Description:
+freadptr() function: Pointer to the input buffer of a stream.
+
+Files:
+lib/freadptr.h
+lib/freadptr.c
+
+Depends-on:
+
+configure.ac:
+
+Makefile.am:
+lib_SOURCES += freadptr.c
+
+Include:
+"freadptr.h"
+
+License:
+LGPL
+
+Maintainer:
+Bruno Haible
+