summaryrefslogtreecommitdiff
path: root/lib/fseterr.c
diff options
context:
space:
mode:
authorBruno Haible <bruno@clisp.org>2007-03-09 02:41:51 +0000
committerBruno Haible <bruno@clisp.org>2007-03-09 02:41:51 +0000
commit20b319a6d47d029941507a8db8b5a2a67b40cd23 (patch)
treedd67394f108f1ffed55f76ed259df8d8bacf42bb /lib/fseterr.c
parentd2b0c77abf5b72cbf78ec4e4e404c851950b0fef (diff)
downloadgnulib-20b319a6d47d029941507a8db8b5a2a67b40cd23.tar.gz
Preserve errno.
Diffstat (limited to 'lib/fseterr.c')
-rw-r--r--lib/fseterr.c5
1 files changed, 5 insertions, 0 deletions
diff --git a/lib/fseterr.c b/lib/fseterr.c
index 5ff8ba7e79..3f876155b3 100644
--- a/lib/fseterr.c
+++ b/lib/fseterr.c
@@ -20,6 +20,8 @@
/* Specification. */
#include "fseterr.h"
+#include <errno.h>
+
void
fseterr (FILE *fp)
{
@@ -35,9 +37,11 @@ fseterr (FILE *fp)
#else /* unknown */
/* Portable fallback, based on an idea by Rich Felker.
Wow! 6 system calls for something that is just a bit operation! */
+ int saved_errno;
int fd;
int fd2;
+ saved_errno = errno;
fflush (fp);
fd = fileno (fp);
fd2 = dup (fd);
@@ -51,5 +55,6 @@ fseterr (FILE *fp)
abort ();
close (fd2);
}
+ errno = saved_errno;
#endif
}