1 /* Retrieve information about a FILE stream. 2 Copyright (C) 2007-2021 Free Software Foundation, Inc. 3 4 This file is free software: you can redistribute it and/or modify 5 it under the terms of the GNU Lesser General Public License as 6 published by the Free Software Foundation; either version 2.1 of the 7 License, or (at your option) any later version. 8 9 This file 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 Lesser General Public License for more details. 13 14 You should have received a copy of the GNU Lesser General Public License 15 along with this program. If not, see <https://www.gnu.org/licenses/>. */ 16 17 #include <stdbool.h> 18 #include <stdio.h> 19 20 /* Return true if the stream STREAM is opened read-only, or if the 21 last operation on the stream was a read operation. Return false if 22 the stream is opened write-only or append-only, or if it supports 23 writing and there is no current read operation (such as fgetc). 24 25 freading and fwriting will never both be true. If STREAM supports 26 both reads and writes, then: 27 - both freading and fwriting might be false when the stream is first 28 opened, after read encounters EOF, or after fflush, 29 - freading might be false or true and fwriting might be false 30 after repositioning (such as fseek, fsetpos, or rewind), 31 depending on the underlying implementation. 32 33 STREAM must not be wide-character oriented. */ 34 35 #if HAVE___FREADING && (!defined __GLIBC__ || defined __UCLIBC__ || __GLIBC__ > 2 || (__GLIBC__ == 2 && __GLIBC_MINOR__ >= 7)) 36 /* Solaris >= 7, UnixWare >= 7.1.4.MP4, Cygwin >= 1.7.34, Android API >= 29, not glibc >= 2.2, but glibc >= 2.7, or musl libc */ 37 38 # if HAVE_STDIO_EXT_H 39 # include <stdio_ext.h> 40 # endif 41 # define freading(stream) (__freading (stream) != 0) 42 43 #else 44 45 # ifdef __cplusplus 46 extern "C" { 47 # endif 48 49 extern bool freading (FILE *stream) _GL_ATTRIBUTE_PURE; 50 51 # ifdef __cplusplus 52 } 53 # endif 54 55 #endif