diff options
Diffstat (limited to 'libdm/libdm-file.c')
-rw-r--r-- | libdm/libdm-file.c | 13 |
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; +} |