ubase

suckless linux base utils
git clone git://git.2f30.org/ubase
Log | Files | Refs | README | LICENSE

commit 98f7fcad946431881edf44c2415e96956b8ecd75
parent e5b9f696267cc68be69757d8a04590e2abdb8719
Author: sin <sin@2f30.org>
Date:   Sat, 15 Mar 2014 18:37:16 +0000

Factor out umount -a into a separate function

Diffstat:
Mumount.c | 43++++++++++++++++++++++++++-----------------
1 file changed, 26 insertions(+), 17 deletions(-)

diff --git a/umount.c b/umount.c @@ -6,6 +6,8 @@ #include <sys/mount.h> #include "util.h" +static int umountall(int); + static void usage(void) { @@ -21,8 +23,6 @@ main(int argc, char *argv[]) int aflag = 0; int flags = 0; int ret = EXIT_SUCCESS; - FILE *fp; - struct mntent *me; ARGBEGIN { case 'a': @@ -43,21 +43,8 @@ main(int argc, char *argv[]) if (argc < 1 && aflag == 0) usage(); - if (aflag == 1) { - fp = setmntent("/etc/mtab", "r"); - if (!fp) - eprintf("setmntent %s:", "/etc/mtab"); - while ((me = getmntent(fp))) { - if (strcmp(me->mnt_type, "proc") == 0) - continue; - if (umount2(me->mnt_dir, flags) < 0) { - weprintf("umount2 %s:", me->mnt_dir); - ret = EXIT_FAILURE; - } - } - endmntent(fp); - return ret; - } + if (aflag == 1) + return umountall(flags); for (i = 0; i < argc; i++) { if (umount2(argv[i], flags) < 0) { @@ -67,3 +54,25 @@ main(int argc, char *argv[]) } return ret; } + +static int +umountall(int flags) +{ + FILE *fp; + struct mntent *me; + int ret; + + fp = setmntent("/etc/mtab", "r"); + if (!fp) + eprintf("setmntent %s:", "/etc/mtab"); + while ((me = getmntent(fp))) { + if (strcmp(me->mnt_type, "proc") == 0) + continue; + if (umount2(me->mnt_dir, flags) < 0) { + weprintf("umount2 %s:", me->mnt_dir); + ret = EXIT_FAILURE; + } + } + endmntent(fp); + return ret; +}