(root)/
coreutils-9.4/
lib/
freading.h
       1  /* Retrieve information about a FILE stream.
       2     Copyright (C) 2007-2023 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  /* This file uses _GL_ATTRIBUTE_PURE, HAVE___FREADING, HAVE_STDIO_EXT_H.  */
      18  #if !_GL_CONFIG_H_INCLUDED
      19   #error "Please include config.h first."
      20  #endif
      21  
      22  #include <stdio.h>
      23  
      24  /* Return true if the stream STREAM is opened read-only, or if the
      25     last operation on the stream was a read operation.  Return false if
      26     the stream is opened write-only or append-only, or if it supports
      27     writing and there is no current read operation (such as fgetc).
      28  
      29     freading and fwriting will never both be true.  If STREAM supports
      30     both reads and writes, then:
      31       - both freading and fwriting might be false when the stream is first
      32         opened, after read encounters EOF, or after fflush,
      33       - freading might be false or true and fwriting might be false
      34         after repositioning (such as fseek, fsetpos, or rewind),
      35     depending on the underlying implementation.
      36  
      37     STREAM must not be wide-character oriented.  */
      38  
      39  #if HAVE___FREADING && (!defined __GLIBC__ || defined __UCLIBC__ || __GLIBC__ > 2 || (__GLIBC__ == 2 && __GLIBC_MINOR__ >= 7))
      40  /* 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  */
      41  
      42  # if HAVE_STDIO_EXT_H
      43  #  include <stdio_ext.h>
      44  # endif
      45  # define freading(stream) (__freading (stream) != 0)
      46  
      47  #else
      48  
      49  # ifdef __cplusplus
      50  extern "C" {
      51  # endif
      52  
      53  extern bool freading (FILE *stream) _GL_ATTRIBUTE_PURE;
      54  
      55  # ifdef __cplusplus
      56  }
      57  # endif
      58  
      59  #endif