ubase

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

commit 7f92db73273fda65ad7660410f0d23f0c9b1095e
parent 4879ea07b483be90efa9d4dd1397f574d4c97dbd
Author: sin <sin@2f30.org>
Date:   Fri Mar  7 13:49:40 +0000

Implement umount -a

Diffstat:
umount.c | 27++++++++++++++++++++++++---
1 file changed, 24 insertions(+), 3 deletions(-)
diff --git a/umount.c b/umount.c @@ -1,23 +1,30 @@ /* See LICENSE file for copyright and license details. */ -#include <sys/mount.h> +#include <mntent.h> #include <stdio.h> #include <stdlib.h> +#include <sys/mount.h> #include "util.h" static void usage(void) { - eprintf("usage: %s [-lfn] target\n", argv0); + eprintf("usage: %s [-alfn] target\n", argv0); } int main(int argc, char *argv[]) { int i; + int aflag = 0; int flags = 0; int ret = EXIT_SUCCESS; + FILE *fp; + struct mntent *me; ARGBEGIN { + case 'a': + aflag = 1; + break; case 'f': flags |= MNT_FORCE; break; @@ -30,9 +37,23 @@ main(int argc, char *argv[]) usage(); } ARGEND; - if (argc < 1) + if (argc < 1 && aflag == 0) usage(); + if (aflag == 1) { + fp = setmntent("/etc/fstab", "r"); + if (!fp) + eprintf("setmntent %s:", "/etc/fstab"); + while ((me = getmntent(fp))) { + if (umount2(me->mnt_dir, flags) < 0) { + perror("umount2:"); + ret = EXIT_FAILURE; + } + } + endmntent(fp); + return ret; + } + for (i = 0; i < argc; i++) { if (umount2(argv[i], flags) < 0) perror("umount2:");