From af9854b81a681d2eb6c12f7db2ca54f1f4c65129 Mon Sep 17 00:00:00 2001 From: Denis Vlasenko Date: Thu, 14 Sep 2006 16:40:46 +0000 Subject: umount: do not try to close FILE* which is NULL. --- util-linux/umount.c | 24 +++++++++++++----------- 1 file changed, 13 insertions(+), 11 deletions(-) (limited to 'util-linux/umount.c') diff --git a/util-linux/umount.c b/util-linux/umount.c index fabc3d049..1a6b14ccc 100644 --- a/util-linux/umount.c +++ b/util-linux/umount.c @@ -59,15 +59,17 @@ int umount_main(int argc, char **argv) if (!(fp = setmntent(bb_path_mtab_file, "r"))) { if (opt & OPT_ALL) - bb_error_msg_and_die("Cannot open %s", bb_path_mtab_file); - } else while (getmntent_r(fp,&me,path,sizeof(path))) { - m = xmalloc(sizeof(struct mtab_list)); - m->next = mtl; - m->device = xstrdup(me.mnt_fsname); - m->dir = xstrdup(me.mnt_dir); - mtl = m; + bb_error_msg_and_die("cannot open %s", bb_path_mtab_file); + } else { + while (getmntent_r(fp,&me,path,sizeof(path))) { + m = xmalloc(sizeof(struct mtab_list)); + m->next = mtl; + m->device = xstrdup(me.mnt_fsname); + m->dir = xstrdup(me.mnt_dir); + mtl = m; + } + endmntent(fp); } - endmntent(fp); /* If we're not mounting all, we need at least one argument. */ if (!(opt & OPT_ALL)) { @@ -111,13 +113,13 @@ int umount_main(int argc, char **argv) // If still can't umount, maybe remount read-only? if (curstat && (opt & OPT_REMOUNT) && errno == EBUSY && m) { curstat = mount(m->device, zapit, NULL, MS_REMOUNT|MS_RDONLY, NULL); - bb_error_msg(curstat ? "Cannot remount %s read-only" : + bb_error_msg(curstat ? "cannot remount %s read-only" : "%s busy - remounted read-only", m->device); } if (curstat) { status = EXIT_FAILURE; - bb_perror_msg("Couldn't umount %s", zapit); + bb_perror_msg("cannot umount %s", zapit); } else { /* De-allocate the loop device. This ioctl should be ignored on * any non-loop block devices. */ @@ -143,7 +145,7 @@ int umount_main(int argc, char **argv) free(mtl->device); free(mtl->dir); free(mtl); - mtl=m; + mtl = m; } } -- cgit v1.2.3