summaryrefslogtreecommitdiff
path: root/mount.c
diff options
context:
space:
mode:
authorMatt Kraai2001-04-17 04:32:50 +0000
committerMatt Kraai2001-04-17 04:32:50 +0000
commit1240082e37d5e89c618de0d28d8466e611c41f4a (patch)
treed5e2fa5b3336c4f98f10984fa2ea2fe5428e07f3 /mount.c
parent24ed3bee0c4ca631855a0f43f75e30ba0c134b9f (diff)
downloadbusybox-1240082e37d5e89c618de0d28d8466e611c41f4a.zip
busybox-1240082e37d5e89c618de0d28d8466e611c41f4a.tar.gz
Further cleanup of mount option handling.
Diffstat (limited to 'mount.c')
-rw-r--r--mount.c123
1 files changed, 61 insertions, 62 deletions
diff --git a/mount.c b/mount.c
index 311d518..6a4c8eb 100644
--- a/mount.c
+++ b/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");