-#include <errno.h>
-#include <linux/unistd.h>
-
-
-/* Include our own version of sys/mount.h, since libc5 doesn't
- * know about umount2 */
-static _syscall1(int, umount, const char *, special_file);
-static _syscall2(int, umount2, const char *, special_file, int, flags);
-static _syscall5(int, mount, const char *, special_file, const char *, dir,
- const char *, fstype, unsigned long int, rwflag, const void *, data);
-#define MNT_FORCE 1
-#define MS_MGC_VAL 0xc0ed0000 /* Magic flag number to indicate "new" flags */
-#define MS_REMOUNT 32 /* Alter flags of a mounted FS. */
-#define MS_RDONLY 1 /* Mount read-only. */
-
-
-static const char umount_usage[] =
- "umount [flags] filesystem|directory\n"
-#ifndef BB_FEATURE_TRIVIAL_HELP
- "Unmount file systems\n"
- "\nFlags:\n" "\t-a:\tUnmount all file systems"
-#ifdef BB_MTAB
- " in /etc/mtab\n\t-n:\tDon't erase /etc/mtab entries\n"
-#else
- "\n"
-#endif
- "\t-r:\tTry to remount devices as read-only if mount is busy\n"
-#if defined BB_FEATURE_MOUNT_FORCE
- "\t-f:\tForce filesystem umount (i.e. unreachable NFS server)\n"
-#endif
-#if defined BB_FEATURE_MOUNT_LOOP
- "\t-l:\tDo not free loop device (if a loop device has been used)\n"
-#endif
-#endif
-;
-
-struct _mtab_entry_t {
- char *device;
- char *mountpt;
- struct _mtab_entry_t *next;
-};
-
-static struct _mtab_entry_t *mtab_cache = NULL;
-
-
-
-#if defined BB_FEATURE_MOUNT_FORCE
-static int doForce = FALSE;
-#endif
-#if defined BB_FEATURE_MOUNT_LOOP
-static int freeLoop = TRUE;
-#endif
-static int useMtab = TRUE;
-static int umountAll = FALSE;
-static int doRemount = FALSE;
-extern const char mtab_file[]; /* Defined in utility.c */
-
-
-
-/* These functions are here because the getmntent functions do not appear
- * to be re-entrant, which leads to all sorts of problems when we try to
- * use them recursively - randolph
- *
- * TODO: Perhaps switch to using Glibc's getmntent_r
- * -Erik
- */
-void mtab_read(void)