From 001e7d63dfe613e249e9f4ab53170b401532afd3 Mon Sep 17 00:00:00 2001
From: Eric Blake <eblake@redhat.com>
Date: Mon, 2 May 2011 11:41:12 -0600
Subject: [PATCH] fclose: reduce dependencies

In an LGPLv2+ project, the last change to fclose dragged in
inappropriate modules.

* modules/fclose (Depends-on): Switch from fflush/fseeko to
simpler lseek.
* lib/fclose.c (rpl_fclose): Likewise.
Reported by Simon Josefsson.

Signed-off-by: Eric Blake <eblake@redhat.com>
---
 ChangeLog      | 6 ++++++
 lib/fclose.c   | 6 ++++--
 modules/fclose | 3 +--
 3 files changed, 11 insertions(+), 4 deletions(-)

diff --git a/ChangeLog b/ChangeLog
index d6ac179d9a..57288d83be 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,11 @@
 2011-05-02  Eric Blake  <eblake@redhat.com>
 
+	fclose: reduced dependencies
+	* modules/fclose (Depends-on): Switch from fflush/fseeko to
+	simpler lseek.
+	* lib/fclose.c (rpl_fclose): Likewise.
+	Reported by Simon Josefsson.
+
 	exit: drop remaining clients
 	* modules/argmatch (Depends-on): Replace exit with stdlib.
 	* modules/copy-file (Depends-on): Likewise.
diff --git a/lib/fclose.c b/lib/fclose.c
index bce409c960..c8c2fd8e4c 100644
--- a/lib/fclose.c
+++ b/lib/fclose.c
@@ -33,8 +33,10 @@ rpl_fclose (FILE *fp)
   int saved_errno = 0;
 
   /* We only need to flush the file if it is not reading or if it is
-     seekable.  */
-  if ((!freading (fp) || fseeko (fp, 0, SEEK_CUR) == 0) && fflush (fp))
+     seekable.  This only guarantees the file position of input files
+     if the fflush module is also in use.  */
+  if ((!freading (fp) || lseek (fileno (fp), 0, SEEK_CUR) != -1)
+      && fflush (fp))
     saved_errno = errno;
 
   if (close (fileno (fp)) < 0 && saved_errno == 0)
diff --git a/modules/fclose b/modules/fclose
index d8727c3075..434dd737dc 100644
--- a/modules/fclose
+++ b/modules/fclose
@@ -8,9 +8,8 @@ m4/fclose.m4
 Depends-on:
 stdio
 close
-fflush
 freading
-fseeko
+lseek
 
 configure.ac:
 gl_FUNC_FCLOSE
-- 
2.30.2