summaryrefslogtreecommitdiffstats
path: root/libdm/libdm-file.c
diff options
context:
space:
mode:
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;
+}