More stuff.
No binary (build failed)
—
(log yok)
| @@ -4,12 +4,15 @@ | |
| * Fixed mkdir -m option so that it works. | |
| * kill segfaulted w/o any arguments. Now it doesn't do that. | |
| * kill wasn't properly accepting signal names. It does now. | |
| - | * Added new apps chvt and deallocvt |
| - | * Major adjustment of init.c. Code is now readable IMHO, |
| - | and much more solid. |
| + | * Added new apps chvt and deallocvt (I should probably add open) |
| + | * Major rewrite of init.c. Code is now readable by mere mortals IMHO. |
| * Wrote sed -- weighs only 1.8k (5.8k with full regular expressions!). | |
| * Fixed a stupid seg-fault in sync | |
| - | * Fixed mount -- mount -a always mounted rw despite /etc/fstab ro entries. |
| + | * Fixed mount -- mount -a failed to parse and apply mount options |
| + | * Added BB_MTAB, allowing (at the cost of ~1.5k and the need for a rw /etc) |
| + | folks to use a real /etc/mtab file instead of a symlink to /proc/mounts. |
| + | mount, and umount will add/remove entries and df will now use /etc/mtab |
| + | if BB_MTAB is defined. |
| -Erik Andersen | |
| @@ -38,6 +38,7 @@ | |
| #define BB_MORE | |
| #define BB_MOUNT | |
| //#define BB_MT | |
| + | #define BB_MTAB |
| #define BB_MV | |
| //#define BB_PRINTF | |
| #define BB_PS | |
| @@ -31,6 +31,7 @@ | |
| static const char df_usage[] = "df [filesystem ...]\n" | |
| "\n" "\tPrint the filesystem space used and space available.\n"; | |
| + | extern const char mtab_file[]; /* Defined in utility.c */ |
| static int df(char *device, const char *mountPoint) | |
| { | |
| @@ -113,7 +114,7 @@ extern int df_main(int argc, char **argv) | |
| int status; | |
| while (argc > 1) { | |
| - | if ((mountEntry = findMountPoint(argv[1], "/proc/mounts")) == |
| + | if ((mountEntry = findMountPoint(argv[1], mtab_file)) == |
| 0) { | |
| fprintf(stderr, "%s: can't find mount point.\n", argv[1]); | |
| return 1; | |
| @@ -129,9 +130,9 @@ extern int df_main(int argc, char **argv) | |
| FILE *mountTable; | |
| struct mntent *mountEntry; | |
| - | mountTable = setmntent("/proc/mounts", "r"); |
| + | mountTable = setmntent(mtab_file, "r"); |
| if (mountTable == 0) { | |
| - | perror("/proc/mounts"); |
| + | perror(mtab_file); |
| exit(FALSE); | |
| } | |
| @@ -31,6 +31,7 @@ | |
| static const char df_usage[] = "df [filesystem ...]\n" | |
| "\n" "\tPrint the filesystem space used and space available.\n"; | |
| + | extern const char mtab_file[]; /* Defined in utility.c */ |
| static int df(char *device, const char *mountPoint) | |
| { | |
| @@ -113,7 +114,7 @@ extern int df_main(int argc, char **argv) | |
| int status; | |
| while (argc > 1) { | |
| - | if ((mountEntry = findMountPoint(argv[1], "/proc/mounts")) == |
| + | if ((mountEntry = findMountPoint(argv[1], mtab_file)) == |
| 0) { | |
| fprintf(stderr, "%s: can't find mount point.\n", argv[1]); | |
| return 1; | |
| @@ -129,9 +130,9 @@ extern int df_main(int argc, char **argv) | |
| FILE *mountTable; | |
| struct mntent *mountEntry; | |
| - | mountTable = setmntent("/proc/mounts", "r"); |
| + | mountTable = setmntent(mtab_file, "r"); |
| if (mountTable == 0) { | |
| - | perror("/proc/mounts"); |
| + | perror(mtab_file); |
| exit(FALSE); | |
| } | |
| @@ -47,7 +47,6 @@ | |
| #define isWildCard(ch) (((ch) == '*') || ((ch) == '?') || ((ch) == '[')) | |
| - | |
| struct Applet { | |
| const char* name; | |
| int (*main)(int argc, char** argv); | |
| @@ -147,6 +146,10 @@ extern void my_getgrgid(char* group, gid_t gid); | |
| extern int get_kernel_revision(); | |
| extern int get_console_fd(char* tty_name); | |
| + | extern void write_mtab(char* blockDevice, char* directory, |
| + | char* filesystemType, long flags, char* string_flags); |
| + | extern void erase_mtab(const char * name); |
| + | |
| #if defined (BB_FSCK_MINIX) || defined (BB_MKFS_MINIX) | |
| @@ -41,11 +41,17 @@ | |
| #include <ctype.h> | |
| #include <fstab.h> | |
| + | extern const char mtab_file[]; /* Defined in utility.c */ |
| + | |
| static const char mount_usage[] = "Usage:\tmount [flags]\n" | |
| "\tmount [flags] device directory [-o options,more-options]\n" | |
| "\n" | |
| "Flags:\n" | |
| "\t-a:\tMount all file systems in fstab.\n" | |
| + | #ifdef BB_MTAB |
| + | "\t-f:\t\"Fake\" mount. Add entry to mount table but don't mount it.\n" |
| + | "\t-n:\tDon't write a mount table entry.\n" |
| + | #endif |
| "\t-o option:\tOne of many filesystem options, listed below.\n" | |
| "\t-r:\tMount the filesystem read-only.\n" | |
| "\t-t filesystem-type:\tSpecify the filesystem type.\n" | |
| @@ -62,6 +68,7 @@ static const char mount_usage[] = "Usage:\tmount [flags]\n" | |
| "There are EVEN MORE flags that are specific to each filesystem.\n" | |
| "You'll have to see the written documentation for those.\n"; | |
| + | |
| struct mount_options { | |
| const char *name; | |
| unsigned long and; | |
| @@ -84,6 +91,29 @@ static const struct mount_options mount_options[] = { | |
| {0, 0, 0} | |
| }; | |
| + | #if ! defined BB_MTAB |
| + | #define do_mount(specialfile, dir, filesystemtype, flags, string_flags, useMtab, fakeIt) \ |
| + | mount(specialfile, dir, filesystemtype, flags, string_flags) |
| + | #else |
| + | static int |
| + | do_mount(char* specialfile, char* dir, char* filesystemtype, |
| + | long flags, void* string_flags, int useMtab, int fakeIt) |
| + | { |
| + | int status=0; |
| + | |
| + | if (fakeIt==FALSE) |
| + | status=mount(specialfile, dir, filesystemtype, flags, string_flags); |
| + | |
| + | if ( status == 0 ) { |
| + | if ( useMtab==TRUE ) |
| + | write_mtab(specialfile, dir, filesystemtype, flags, string_flags); |
| + | return 0; |
| + | } |
| + | else |
| + | return( status); |
| + | } |
| + | #endif |
| + | |
| /* Seperate standard mount options from the nonstandard string options */ | |
| static void | |
| @@ -126,9 +156,8 @@ parse_mount_options ( char *options, unsigned long *flags, char *strflags) | |
| } | |
| int | |
| - | mount_one ( |
| - | char *blockDevice, char *directory, char *filesystemType, |
| - | unsigned long flags, char *string_flags) |
| + | mount_one(char *blockDevice, char *directory, char *filesystemType, |
| + | unsigned long flags, char *string_flags, int useMtab, int fakeIt) |
| { | |
| int status = 0; | |
| @@ -152,16 +181,16 @@ mount_one ( | |
| filesystemType = buf; | |
| filesystemType++; // hop past tab | |
| - | status = mount (blockDevice, directory, filesystemType, |
| - | flags | MS_MGC_VAL, string_flags); |
| + | status = do_mount (blockDevice, directory, filesystemType, |
| + | flags | MS_MGC_VAL, string_flags, useMtab, fakeIt); |
| if (status == 0) | |
| break; | |
| } | |
| } | |
| fclose (f); | |
| } else { | |
| - | status = mount (blockDevice, directory, filesystemType, |
| - | flags | MS_MGC_VAL, string_flags); |
| + | status = do_mount (blockDevice, directory, filesystemType, |
| + | flags | MS_MGC_VAL, string_flags, useMtab, fakeIt); |
| } | |
| if (status) { | |
| @@ -180,15 +209,17 @@ extern int mount_main (int argc, char **argv) | |
| char *device = NULL; | |
| char *directory = NULL; | |
| struct stat statBuf; | |
| - | int all = 0; |
| + | int all = FALSE; |
| + | int fakeIt = FALSE; |
| + | int useMtab = TRUE; |
| int i; | |
| if (stat("/etc/fstab", &statBuf) < 0) | |
| fprintf(stderr, "/etc/fstab file missing -- Please install one.\n\n"); | |
| if (argc == 1) { | |
| - | FILE *mountTable; |
| - | if ((mountTable = setmntent ("/proc/mounts", "r"))) { |
| + | FILE *mountTable = setmntent (mtab_file, "r"); |
| + | if (mountTable) { |
| struct mntent *m; | |
| while ((m = getmntent (mountTable)) != 0) { | |
| struct fstab* fstabItem; | |
| @@ -203,6 +234,8 @@ extern int mount_main (int argc, char **argv) | |
| m->mnt_type, m->mnt_opts); | |
| } | |
| endmntent (mountTable); | |
| + | } else { |
| + | perror(mtab_file); |
| } | |
| exit( TRUE); | |
| } | |
| @@ -241,6 +274,14 @@ extern int mount_main (int argc, char **argv) | |
| case 'a': | |
| all = TRUE; | |
| break; | |
| + | #ifdef BB_MTAB |
| + | case 'f': |
| + | fakeIt = TRUE; |
| + | break; |
| + | case 'n': |
| + | useMtab = FALSE; |
| + | break; |
| + | #endif |
| case 'v': | |
| case 'h': | |
| case '-': | |
| @@ -263,7 +304,6 @@ extern int mount_main (int argc, char **argv) | |
| } | |
| if (all == TRUE) { | |
| - | long newFlags; |
| struct mntent *m; | |
| FILE *f = setmntent ("/etc/fstab", "r"); | |
| @@ -279,17 +319,18 @@ extern int mount_main (int argc, char **argv) | |
| (!strstr (m->mnt_type, "swap")) && | |
| (!strstr (m->mnt_type, "nfs"))) | |
| { | |
| - | newFlags = flags; |
| + | flags = 0; |
| *string_flags = '\0'; | |
| - | parse_mount_options(m->mnt_opts, &newFlags, string_flags); |
| - | mount_one (m->mnt_fsname, m->mnt_dir, m->mnt_type, newFlags, string_flags); |
| + | parse_mount_options(m->mnt_opts, &flags, string_flags); |
| + | mount_one (m->mnt_fsname, m->mnt_dir, m->mnt_type, |
| + | flags, string_flags, useMtab, fakeIt); |
| } | |
| } | |
| endmntent (f); | |
| } else { | |
| if (device && directory) { | |
| exit (mount_one (device, directory, filesystemType, | |
| - | flags, string_flags)); |
| + | flags, string_flags, useMtab, fakeIt)); |
| } else { | |
| fprintf (stderr, "%s\n", mount_usage); | |
| exit( FALSE); | |
| @@ -29,24 +29,54 @@ | |
| #include <errno.h> | |
| static const char umount_usage[] = | |
| - | "Usage: umount filesystem\n" |
| - | " or: umount directory\n" |
| - | " or: umount -a" |
| - | "to unmount all mounted file systems.\n"; |
| + | "Usage: umount [flags] filesystem|directory\n" |
| + | "Optional Flags:\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 |
| + | ; |
| + | |
| + | |
| + | static int useMtab = TRUE; |
| + | static int umountAll = FALSE; |
| + | extern const char mtab_file[]; /* Defined in utility.c */ |
| + | |
| + | #if ! defined BB_MTAB |
| + | #define do_umount( blockDevice, useMtab) umount( blockDevice) |
| + | #else |
| + | static int |
| + | do_umount(const char* name, int useMtab) |
| + | { |
| + | int status = umount(name); |
| + | |
| + | if ( status == 0 ) { |
| + | if ( useMtab==TRUE ) |
| + | erase_mtab(name); |
| + | return 0; |
| + | } |
| + | else |
| + | return( status); |
| + | } |
| + | #endif |
| static int | |
| - | umount_all() |
| + | umount_all(int useMtab) |
| { | |
| int status; | |
| struct mntent *m; | |
| FILE *mountTable; | |
| - | if ((mountTable = setmntent ("/proc/mounts", "r"))) { |
| + | if ((mountTable = setmntent (mtab_file, "r"))) { |
| while ((m = getmntent (mountTable)) != 0) { | |
| char *blockDevice = m->mnt_fsname; | |
| + | #if ! defined BB_MTAB |
| if (strcmp (blockDevice, "/dev/root") == 0) | |
| blockDevice = (getfsfile ("/"))->fs_spec; | |
| - | status=umount (m->mnt_dir); |
| + | #endif |
| + | status=do_umount (m->mnt_dir, useMtab); |
| if (status!=0) { | |
| /* Don't bother retrying the umount on busy devices */ | |
| if (errno==EBUSY) { | |
| @@ -56,7 +86,7 @@ umount_all() | |
| printf ("Trying to umount %s failed: %s\n", | |
| m->mnt_dir, strerror(errno)); | |
| printf ("Instead trying to umount %s\n", blockDevice); | |
| - | status=umount (blockDevice); |
| + | status=do_umount (blockDevice, useMtab); |
| if (status!=0) { | |
| printf ("Couldn't umount %s on %s (type %s): %s\n", | |
| blockDevice, m->mnt_dir, m->mnt_type, strerror(errno)); | |
| @@ -69,27 +99,35 @@ umount_all() | |
| } | |
| extern int | |
| - | umount_main(int argc, char * * argv) |
| + | umount_main(int argc, char** argv) |
| { | |
| if (argc < 2) { | |
| usage( umount_usage); | |
| } | |
| - | argc--; |
| - | argv++; |
| /* Parse any options */ | |
| - | while (**argv == '-') { |
| + | while (argc-- > 0 && **(++argv) == '-') { |
| while (*++(*argv)) switch (**argv) { | |
| case 'a': | |
| - | exit ( umount_all() ); |
| + | umountAll = TRUE; |
| + | break; |
| + | #ifdef BB_MTAB |
| + | case 'n': |
| + | useMtab = FALSE; |
| break; | |
| + | #endif |
| default: | |
| usage( umount_usage); | |
| } | |
| } | |
| - | if ( umount(*argv) == 0 ) |
| - | exit (TRUE); |
| + | |
| + | |
| + | if(umountAll) { |
| + | exit(umount_all(useMtab)); |
| + | } |
| + | if ( do_umount(*argv,useMtab) == 0 ) |
| + | exit (TRUE); |
| else { | |
| perror("umount"); | |
| exit( FALSE); | |
| @@ -41,11 +41,17 @@ | |
| #include <ctype.h> | |
| #include <fstab.h> | |
| + | extern const char mtab_file[]; /* Defined in utility.c */ |
| + | |
| static const char mount_usage[] = "Usage:\tmount [flags]\n" | |
| "\tmount [flags] device directory [-o options,more-options]\n" | |
| "\n" | |
| "Flags:\n" | |
| "\t-a:\tMount all file systems in fstab.\n" | |
| + | #ifdef BB_MTAB |
| + | "\t-f:\t\"Fake\" mount. Add entry to mount table but don't mount it.\n" |
| + | "\t-n:\tDon't write a mount table entry.\n" |
| + | #endif |
| "\t-o option:\tOne of many filesystem options, listed below.\n" | |
| "\t-r:\tMount the filesystem read-only.\n" | |
| "\t-t filesystem-type:\tSpecify the filesystem type.\n" | |
| @@ -62,6 +68,7 @@ static const char mount_usage[] = "Usage:\tmount [flags]\n" | |
| "There are EVEN MORE flags that are specific to each filesystem.\n" | |
| "You'll have to see the written documentation for those.\n"; | |
| + | |
| struct mount_options { | |
| const char *name; | |
| unsigned long and; | |
| @@ -84,6 +91,29 @@ static const struct mount_options mount_options[] = { | |
| {0, 0, 0} | |
| }; | |
| + | #if ! defined BB_MTAB |
| + | #define do_mount(specialfile, dir, filesystemtype, flags, string_flags, useMtab, fakeIt) \ |
| + | mount(specialfile, dir, filesystemtype, flags, string_flags) |
| + | #else |
| + | static int |
| + | do_mount(char* specialfile, char* dir, char* filesystemtype, |
| + | long flags, void* string_flags, int useMtab, int fakeIt) |
| + | { |
| + | int status=0; |
| + | |
| + | if (fakeIt==FALSE) |
| + | status=mount(specialfile, dir, filesystemtype, flags, string_flags); |
| + | |
| + | if ( status == 0 ) { |
| + | if ( useMtab==TRUE ) |
| + | write_mtab(specialfile, dir, filesystemtype, flags, string_flags); |
| + | return 0; |
| + | } |
| + | else |
| + | return( status); |
| + | } |
| + | #endif |
| + | |
| /* Seperate standard mount options from the nonstandard string options */ | |
| static void | |
| @@ -126,9 +156,8 @@ parse_mount_options ( char *options, unsigned long *flags, char *strflags) | |
| } | |
| int | |
| - | mount_one ( |
| - | char *blockDevice, char *directory, char *filesystemType, |
| - | unsigned long flags, char *string_flags) |
| + | mount_one(char *blockDevice, char *directory, char *filesystemType, |
| + | unsigned long flags, char *string_flags, int useMtab, int fakeIt) |
| { | |
| int status = 0; | |
| @@ -152,16 +181,16 @@ mount_one ( | |
| filesystemType = buf; | |
| filesystemType++; // hop past tab | |
| - | status = mount (blockDevice, directory, filesystemType, |
| - | flags | MS_MGC_VAL, string_flags); |
| + | status = do_mount (blockDevice, directory, filesystemType, |
| + | flags | MS_MGC_VAL, string_flags, useMtab, fakeIt); |
| if (status == 0) | |
| break; | |
| } | |
| } | |
| fclose (f); | |
| } else { | |
| - | status = mount (blockDevice, directory, filesystemType, |
| - | flags | MS_MGC_VAL, string_flags); |
| + | status = do_mount (blockDevice, directory, filesystemType, |
| + | flags | MS_MGC_VAL, string_flags, useMtab, fakeIt); |
| } | |
| if (status) { | |
| @@ -180,15 +209,17 @@ extern int mount_main (int argc, char **argv) | |
| char *device = NULL; | |
| char *directory = NULL; | |
| struct stat statBuf; | |
| - | int all = 0; |
| + | int all = FALSE; |
| + | int fakeIt = FALSE; |
| + | int useMtab = TRUE; |
| int i; | |
| if (stat("/etc/fstab", &statBuf) < 0) | |
| fprintf(stderr, "/etc/fstab file missing -- Please install one.\n\n"); | |
| if (argc == 1) { | |
| - | FILE *mountTable; |
| - | if ((mountTable = setmntent ("/proc/mounts", "r"))) { |
| + | FILE *mountTable = setmntent (mtab_file, "r"); |
| + | if (mountTable) { |
| struct mntent *m; | |
| while ((m = getmntent (mountTable)) != 0) { | |
| struct fstab* fstabItem; | |
| @@ -203,6 +234,8 @@ extern int mount_main (int argc, char **argv) | |
| m->mnt_type, m->mnt_opts); | |
| } | |
| endmntent (mountTable); | |
| + | } else { |
| + | perror(mtab_file); |
| } | |
| exit( TRUE); | |
| } | |
| @@ -241,6 +274,14 @@ extern int mount_main (int argc, char **argv) | |
| case 'a': | |
| all = TRUE; | |
| break; | |
| + | #ifdef BB_MTAB |
| + | case 'f': |
| + | fakeIt = TRUE; |
| + | break; |
| + | case 'n': |
| + | useMtab = FALSE; |
| + | break; |
| + | #endif |
| case 'v': | |
| case 'h': | |
| case '-': | |
| @@ -263,7 +304,6 @@ extern int mount_main (int argc, char **argv) | |
| } | |
| if (all == TRUE) { | |
| - | long newFlags; |
| struct mntent *m; | |
| FILE *f = setmntent ("/etc/fstab", "r"); | |
| @@ -279,17 +319,18 @@ extern int mount_main (int argc, char **argv) | |
| (!strstr (m->mnt_type, "swap")) && | |
| (!strstr (m->mnt_type, "nfs"))) | |
| { | |
| - | newFlags = flags; |
| + | flags = 0; |
| *string_flags = '\0'; | |
| - | parse_mount_options(m->mnt_opts, &newFlags, string_flags); |
| - | mount_one (m->mnt_fsname, m->mnt_dir, m->mnt_type, newFlags, string_flags); |
| + | parse_mount_options(m->mnt_opts, &flags, string_flags); |
| + | mount_one (m->mnt_fsname, m->mnt_dir, m->mnt_type, |
| + | flags, string_flags, useMtab, fakeIt); |
| } | |
| } | |
| endmntent (f); | |
| } else { | |
| if (device && directory) { | |
| exit (mount_one (device, directory, filesystemType, | |
| - | flags, string_flags)); |
| + | flags, string_flags, useMtab, fakeIt)); |
| } else { | |
| fprintf (stderr, "%s\n", mount_usage); | |
| exit( FALSE); | |
| @@ -29,24 +29,54 @@ | |
| #include <errno.h> | |
| static const char umount_usage[] = | |
| - | "Usage: umount filesystem\n" |
| - | " or: umount directory\n" |
| - | " or: umount -a" |
| - | "to unmount all mounted file systems.\n"; |
| + | "Usage: umount [flags] filesystem|directory\n" |
| + | "Optional Flags:\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 |
| + | ; |
| + | |
| + | |
| + | static int useMtab = TRUE; |
| + | static int umountAll = FALSE; |
| + | extern const char mtab_file[]; /* Defined in utility.c */ |
| + | |
| + | #if ! defined BB_MTAB |
| + | #define do_umount( blockDevice, useMtab) umount( blockDevice) |
| + | #else |
| + | static int |
| + | do_umount(const char* name, int useMtab) |
| + | { |
| + | int status = umount(name); |
| + | |
| + | if ( status == 0 ) { |
| + | if ( useMtab==TRUE ) |
| + | erase_mtab(name); |
| + | return 0; |
| + | } |
| + | else |
| + | return( status); |
| + | } |
| + | #endif |
| static int | |
| - | umount_all() |
| + | umount_all(int useMtab) |
| { | |
| int status; | |
| struct mntent *m; | |
| FILE *mountTable; | |
| - | if ((mountTable = setmntent ("/proc/mounts", "r"))) { |
| + | if ((mountTable = setmntent (mtab_file, "r"))) { |
| while ((m = getmntent (mountTable)) != 0) { | |
| char *blockDevice = m->mnt_fsname; | |
| + | #if ! defined BB_MTAB |
| if (strcmp (blockDevice, "/dev/root") == 0) | |
| blockDevice = (getfsfile ("/"))->fs_spec; | |
| - | status=umount (m->mnt_dir); |
| + | #endif |
| + | status=do_umount (m->mnt_dir, useMtab); |
| if (status!=0) { | |
| /* Don't bother retrying the umount on busy devices */ | |
| if (errno==EBUSY) { | |
| @@ -56,7 +86,7 @@ umount_all() | |
| printf ("Trying to umount %s failed: %s\n", | |
| m->mnt_dir, strerror(errno)); | |
| printf ("Instead trying to umount %s\n", blockDevice); | |
| - | status=umount (blockDevice); |
| + | status=do_umount (blockDevice, useMtab); |
| if (status!=0) { | |
| printf ("Couldn't umount %s on %s (type %s): %s\n", | |
| blockDevice, m->mnt_dir, m->mnt_type, strerror(errno)); | |
| @@ -69,27 +99,35 @@ umount_all() | |
| } | |
| extern int | |
| - | umount_main(int argc, char * * argv) |
| + | umount_main(int argc, char** argv) |
| { | |
| if (argc < 2) { | |
| usage( umount_usage); | |
| } | |
| - | argc--; |
| - | argv++; |
| /* Parse any options */ | |
| - | while (**argv == '-') { |
| + | while (argc-- > 0 && **(++argv) == '-') { |
| while (*++(*argv)) switch (**argv) { | |
| case 'a': | |
| - | exit ( umount_all() ); |
| + | umountAll = TRUE; |
| + | break; |
| + | #ifdef BB_MTAB |
| + | case 'n': |
| + | useMtab = FALSE; |
| break; | |
| + | #endif |
| default: | |
| usage( umount_usage); | |
| } | |
| } | |
| - | if ( umount(*argv) == 0 ) |
| - | exit (TRUE); |
| + | |
| + | |
| + | if(umountAll) { |
| + | exit(umount_all(useMtab)); |
| + | } |
| + | if ( do_umount(*argv,useMtab) == 0 ) |
| + | exit (TRUE); |
| else { | |
| perror("umount"); | |
| exit( FALSE); | |
| @@ -36,6 +36,15 @@ | |
| #include <unistd.h> | |
| #include <ctype.h> | |
| + | #ifdef BB_MTAB |
| + | const char mtab_file[] = "/etc/mtab"; |
| + | #else |
| + | #if defined BB_MOUNT || defined BB_UMOUNT || defined BB_DF |
| + | const char mtab_file[] = "/proc/mounts"; |
| + | #endif |
| + | #endif |
| + | |
| + | |
| /* volatile so gcc knows this is the enod of the line */ | |
| volatile void usage(const char *usage) | |
| { | |