OpenCoverage

fseterr.c

Absolute File Name:/home/opencoverage/opencoverage/guest-scripts/coreutils/src/gnulib/lib/fseterr.c
Source codeSwitch to Preprocessed file
LineSourceCount
1/* Set the error indicator of a stream.-
2 Copyright (C) 2007-2018 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 3 of the License, or-
7 (at your option) 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-
15 along with this program. If not, see <https://www.gnu.org/licenses/>. */-
16-
17#include <config.h>-
18-
19/* Specification. */-
20#include "fseterr.h"-
21-
22#include <errno.h>-
23-
24#include "stdio-impl.h"-
25-
26void-
27fseterr (FILE *fp)-
28{-
29 /* Most systems provide FILE as a struct and the necessary bitmask in-
30 <stdio.h>, because they need it for implementing getc() and putc() as-
31 fast macros. */-
32#if defined _IO_EOF_SEEN || __GNU_LIBRARY__ == 1 /* GNU libc, BeOS, Haiku, Linux libc5 */-
33 fp->_flags |= _IO_ERR_SEEN;-
34#elif defined __sferror || defined __DragonFly__ || defined __ANDROID__-
35 /* FreeBSD, NetBSD, OpenBSD, DragonFly, Mac OS X, Cygwin, Minix 3, Android */-
36 fp_->_flags |= __SERR;-
37#elif defined __EMX__ /* emx+gcc */-
38 fp->_flags |= _IOERR;-
39#elif defined __minix /* Minix */-
40 fp->_flags |= _IOERR;-
41#elif defined _IOERR /* AIX, HP-UX, IRIX, OSF/1, Solaris, OpenServer, mingw, MSVC, NonStop Kernel, OpenVMS */-
42 fp_->_flag |= _IOERR;-
43#elif defined __UCLIBC__ /* uClibc */-
44 fp->__modeflags |= __FLAG_ERROR;-
45#elif defined __QNX__ /* QNX */-
46 fp->_Mode |= 0x200 /* _MERR */;-
47#elif defined __MINT__ /* Atari FreeMiNT */-
48 fp->__error = 1;-
49#elif defined EPLAN9 /* Plan9 */-
50 if (fp->state != 0 /* CLOSED */)-
51 fp->state = 5 /* ERR */;-
52#elif 0 /* unknown */-
53 /* Portable fallback, based on an idea by Rich Felker.-
54 Wow! 6 system calls for something that is just a bit operation!-
55 Not activated on any system, because there is no way to repair FP when-
56 the sequence of system calls fails, and library code should not call-
57 abort(). */-
58 int saved_errno;-
59 int fd;-
60 int fd2;-
61-
62 saved_errno = errno;-
63 fflush (fp);-
64 fd = fileno (fp);-
65 fd2 = dup (fd);-
66 if (fd2 >= 0)-
67 {-
68 close (fd);-
69 fputc ('\0', fp); /* This should set the error indicator. */-
70 fflush (fp); /* Or this. */-
71 if (dup2 (fd2, fd) < 0)-
72 /* Whee... we botched the stream and now cannot restore it! */-
73 abort ();-
74 close (fd2);-
75 }-
76 errno = saved_errno;-
77#else-
78 #error "Please port gnulib fseterr.c to your platform! Look at the definitions of ferror and clearerr on your system, then report this to bug-gnulib."-
79#endif-
80}
never executed: end of block
0
Source codeSwitch to Preprocessed file

Generated by Squish Coco 4.1.2