diff options
author | Matt Kraai | 2001-04-17 04:32:50 +0000 |
---|---|---|
committer | Matt Kraai | 2001-04-17 04:32:50 +0000 |
commit | 1240082e37d5e89c618de0d28d8466e611c41f4a (patch) | |
tree | d5e2fa5b3336c4f98f10984fa2ea2fe5428e07f3 /util-linux | |
parent | 24ed3bee0c4ca631855a0f43f75e30ba0c134b9f (diff) | |
download | busybox-1240082e37d5e89c618de0d28d8466e611c41f4a.zip busybox-1240082e37d5e89c618de0d28d8466e611c41f4a.tar.gz |
Further cleanup of mount option handling.
Diffstat (limited to 'util-linux')
-rw-r--r-- | util-linux/mount.c | 123 |
1 files changed, 61 insertions, 62 deletions
diff --git a/util-linux/mount.c b/util-linux/mount.c index 311d518..6a4c8eb 100644 --- a/util-linux/mount.c +++ b/util-linux/mount.c @@ -273,6 +273,64 @@ mount_one(char *blockDevice, char *directory, char *filesystemType, return (TRUE); } +void show_mounts() +{ +#if defined BB_FEATURE_USE_DEVPS_PATCH + int fd, i, numfilesystems; + char device[] = "/dev/mtab"; + struct k_mntent *mntentlist; + + /* open device */ + fd = open(device, O_RDONLY); + if (fd < 0) + perror_msg_and_die("open failed for `%s'", device); + + /* How many mounted filesystems? We need to know to + * allocate enough space for later... */ + numfilesystems = ioctl (fd, DEVMTAB_COUNT_MOUNTS); + if (numfilesystems<0) + perror_msg_and_die( "\nDEVMTAB_COUNT_MOUNTS"); + mntentlist = (struct k_mntent *) xcalloc ( numfilesystems, sizeof(struct k_mntent)); + + /* Grab the list of mounted filesystems */ + if (ioctl (fd, DEVMTAB_GET_MOUNTS, mntentlist)<0) + perror_msg_and_die( "\nDEVMTAB_GET_MOUNTS"); + + for( i = 0 ; i < numfilesystems ; i++) { + printf( "%s %s %s %s %d %d\n", mntentlist[i].mnt_fsname, + mntentlist[i].mnt_dir, mntentlist[i].mnt_type, + mntentlist[i].mnt_opts, mntentlist[i].mnt_freq, + mntentlist[i].mnt_passno); + } +#ifdef BB_FEATURE_CLEAN_UP + /* Don't bother to close files or free memory. Exit + * does that automagically, so we can save a few bytes */ + free( mntentlist); + close(fd); +#endif + exit(EXIT_SUCCESS); +#else + FILE *mountTable = setmntent(mtab_file, "r"); + + if (mountTable) { + struct mntent *m; + + while ((m = getmntent(mountTable)) != 0) { + char *blockDevice = m->mnt_fsname; + if (strcmp(blockDevice, "/dev/root") == 0) { + find_real_root_device_name( blockDevice); + } + printf("%s on %s type %s (%s)\n", blockDevice, m->mnt_dir, + m->mnt_type, m->mnt_opts); + } + endmntent(mountTable); + } else { + perror_msg_and_die("%s", mtab_file); + } + exit(EXIT_SUCCESS); +#endif +} + extern int mount_main(int argc, char **argv) { char string_flags_buf[1024] = ""; @@ -289,65 +347,6 @@ extern int mount_main(int argc, char **argv) int rc = EXIT_FAILURE; int fstabmount = FALSE; -#if defined BB_FEATURE_USE_DEVPS_PATCH - if (argc == 1) { - int fd, i, numfilesystems; - char device[] = "/dev/mtab"; - struct k_mntent *mntentlist; - - /* open device */ - fd = open(device, O_RDONLY); - if (fd < 0) - perror_msg_and_die("open failed for `%s'", device); - - /* How many mounted filesystems? We need to know to - * allocate enough space for later... */ - numfilesystems = ioctl (fd, DEVMTAB_COUNT_MOUNTS); - if (numfilesystems<0) - perror_msg_and_die( "\nDEVMTAB_COUNT_MOUNTS"); - mntentlist = (struct k_mntent *) xcalloc ( numfilesystems, sizeof(struct k_mntent)); - - /* Grab the list of mounted filesystems */ - if (ioctl (fd, DEVMTAB_GET_MOUNTS, mntentlist)<0) - perror_msg_and_die( "\nDEVMTAB_GET_MOUNTS"); - - for( i = 0 ; i < numfilesystems ; i++) { - printf( "%s %s %s %s %d %d\n", mntentlist[i].mnt_fsname, - mntentlist[i].mnt_dir, mntentlist[i].mnt_type, - mntentlist[i].mnt_opts, mntentlist[i].mnt_freq, - mntentlist[i].mnt_passno); - } -#ifdef BB_FEATURE_CLEAN_UP - /* Don't bother to close files or free memory. Exit - * does that automagically, so we can save a few bytes */ - free( mntentlist); - close(fd); -#endif - return EXIT_SUCCESS; - } -#else - if (argc == 1) { - FILE *mountTable = setmntent(mtab_file, "r"); - - if (mountTable) { - struct mntent *m; - - while ((m = getmntent(mountTable)) != 0) { - char *blockDevice = m->mnt_fsname; - if (strcmp(blockDevice, "/dev/root") == 0) { - find_real_root_device_name( blockDevice); - } - printf("%s on %s type %s (%s)\n", blockDevice, m->mnt_dir, - m->mnt_type, m->mnt_opts); - } - endmntent(mountTable); - } else { - perror_msg_and_die("%s", mtab_file); - } - return EXIT_SUCCESS; - } -#endif - /* Parse options */ i = --argc; argv++; @@ -405,14 +404,14 @@ extern int mount_main(int argc, char **argv) argv++; } + if (device == NULL && !all) + show_mounts(); + if (all == TRUE || directory == NULL) { struct mntent *m; FILE *f = setmntent("/etc/fstab", "r"); fstabmount = TRUE; - if (all == FALSE && device == NULL) - goto goodbye; - if (f == NULL) perror_msg_and_die( "\nCannot read /etc/fstab"); |