summaryrefslogtreecommitdiffstats
path: root/libdm/libdm-file.c
diff options
context:
space:
mode:
authorJim Meyering <jim@meyering.net>2007-07-24 14:15:45 +0000
committerJim Meyering <jim@meyering.net>2007-07-24 14:15:45 +0000
commit0c3cd7e292642835ffbfd71af68ee5ae46ada470 (patch)
treea1e54a76684513bf928cb2291e3a62fb5563ae83 /libdm/libdm-file.c
parentb07dabbe80556ead13e65efc60095cfac1c29e0c (diff)
downloadlvm2-0c3cd7e292642835ffbfd71af68ee5ae46ada470.tar.gz
lvm2-0c3cd7e292642835ffbfd71af68ee5ae46ada470.tar.xz
lvm2-0c3cd7e292642835ffbfd71af68ee5ae46ada470.zip
dm_fclose: new function
* lib/libdevmapper.h: Declare it. * lib/libdm-file.c (dm_fclose): Define it. * lib/.exported_symbols: Add dm_fclose.
Diffstat (limited to 'libdm/libdm-file.c')
-rw-r--r--libdm/libdm-file.c13
1 files changed, 13 insertions, 0 deletions
diff --git a/libdm/libdm-file.c b/libdm/libdm-file.c
index 54c38b4e..2f16c80c 100644
--- a/libdm/libdm-file.c
+++ b/libdm/libdm-file.c
@@ -72,3 +72,16 @@ int create_dir(const char *dir)
return 0;
}
+int dm_fclose(FILE *stream)
+{
+ int prev_fail = ferror(stream);
+ int fclose_fail = fclose(stream);
+
+ /* If there was a previous failure, but fclose succeeded,
+ clear errno, since ferror does not set it, and its value
+ may be unrelated to the ferror-reported failure. */
+ if (prev_fail && !fclose_fail)
+ errno = 0;
+
+ return prev_fail || fclose_fail ? EOF : 0;
+}