diff options
author | Jim Meyering <jim@meyering.net> | 1998-06-30 03:56:57 +0000 |
---|---|---|
committer | Jim Meyering <jim@meyering.net> | 1998-06-30 03:56:57 +0000 |
commit | ff8b01f40f213846dd22051b74fdb936dd32e9ce (patch) | |
tree | 224c4ecb3ea2a5083699e5b933f0c569d8e3d30d /lib/mountlist.c | |
parent | 07ce9324ed9c846fb77a891248d3601770190731 (diff) | |
download | gnulib-ff8b01f40f213846dd22051b74fdb936dd32e9ce.tar.gz |
(read_filesystem_list) [MOUNTED_GETMNTENT2]:FILEUTILS-3_16q
Always close stream and file descriptor before returning.
Diffstat (limited to 'lib/mountlist.c')
-rw-r--r-- | lib/mountlist.c | 15 |
1 files changed, 12 insertions, 3 deletions
diff --git a/lib/mountlist.c b/lib/mountlist.c index 94430f83c9..92faf4643a 100644 --- a/lib/mountlist.c +++ b/lib/mountlist.c @@ -532,6 +532,7 @@ read_filesystem_list (need_fs_type, all_fs) FILE *fp; int ret; int lockfd = -1; + int fail = 0; # if defined F_RDLCK && defined F_SETLKW /* MNTTAB_LOCK is a macro name of our own invention; it's not present in @@ -557,7 +558,12 @@ read_filesystem_list (need_fs_type, all_fs) fp = fopen (table, "r"); if (fp == NULL) - return NULL; + { + /* FIXME maybe: this close could clobber errno from fopen failure. */ + if (0 <= lockfd) + close (lockfd); + return NULL; + } while ((ret = getmntent (fp, &mnt)) == 0) { @@ -578,10 +584,13 @@ read_filesystem_list (need_fs_type, all_fs) } if (ret > 0) - return NULL; + fail = 1; if (fclose (fp) == EOF) - return NULL; + fail = 1; if (0 <= lockfd && close (lockfd) != 0) + fail = 1; + + if (fail) return NULL; } #endif /* MOUNTED_GETMNTENT2. */ |