1845de1a85572497f319480e66bad92abaa60d10
[gnulib.git] / lib / freading.h
1 /* Retrieve information about a FILE stream.
2    Copyright (C) 2007 Free Software Foundation, Inc.
3
4    This program is free software; you can redistribute it and/or modify
5    it under the terms of the GNU General Public License as published by
6    the Free Software Foundation; either version 2, or (at your option)
7    any later version.
8
9    This program is distributed in the hope that it will be useful,
10    but WITHOUT ANY WARRANTY; without even the implied warranty of
11    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
12    GNU General Public License for more details.
13
14    You should have received a copy of the GNU General Public License along
15    with this program; if not, write to the Free Software Foundation,
16    Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.  */
17
18 #include <stdbool.h>
19 #include <stdio.h>
20
21 /* Return true if the stream STREAM is opened read-only, or if the
22    last operation on the stream was a read operation.  Return false if
23    the stream is opened write-only or append-only, or if it supports
24    writing and there is no current read operation (such as fputc).
25
26    freading and fwriting will never both be true.  If STREAM supports
27    both reads and writes, then both freading and fwriting might be
28    false when the stream is first opened, after repositioning (such as
29    fseek, fsetpos, or rewind), after read encounters EOF, or after
30    fflush, depending on the underlying implementation.
31
32    STREAM must not be wide-character oriented.  */
33
34 #if HAVE___FREADING && !defined __GLIBC__ /* Solaris >= 7, not glibc >= 2.2  */
35
36 # include <stdio_ext.h>
37 # define freading(stream) (__freading (stream) != 0)
38
39 #else
40
41 # ifdef __cplusplus
42 extern "C" {
43 # endif
44
45 extern bool freading (FILE *stream);
46
47 # ifdef __cplusplus
48 }
49 # endif
50
51 #endif