aboutsummaryrefslogtreecommitdiff
path: root/libbb/find_mount_point.c
diff options
context:
space:
mode:
authorDenys Vlasenko <vda.linux@googlemail.com>2009-07-05 04:50:36 +0200
committerDenys Vlasenko <vda.linux@googlemail.com>2009-07-05 04:50:36 +0200
commit09e63bb81f12707d31c8c4570931af0196b53a46 (patch)
tree1b550ca677e6cd4fdd70eabda1fd402684b8ec7d /libbb/find_mount_point.c
parent9b1b62adc4e4c1e80d9f72180c6b7b1eaef9f95a (diff)
downloadbusybox-09e63bb81f12707d31c8c4570931af0196b53a46.tar.gz
df: fix "df /"
also, clean up mount checks in mkfs/fsck. function old new delta find_mount_point 243 261 +18 sha1_process_block64 497 510 +13 find_main 436 444 +8 display_speed 85 90 +5 df_main 795 793 -2 parse_command 1463 1460 -3 static.ignored_mounts 8 - -8 mkfs_minix_main 2962 2937 -25 fsck_minix_main 3065 2970 -95 ------------------------------------------------------------------------------ (add/remove: 0/1 grow/shrink: 4/4 up/down: 44/-133) Total: -89 bytes Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
Diffstat (limited to 'libbb/find_mount_point.c')
-rw-r--r--libbb/find_mount_point.c22
1 files changed, 15 insertions, 7 deletions
diff --git a/libbb/find_mount_point.c b/libbb/find_mount_point.c
index 4cd6b1618..12b2cfce4 100644
--- a/libbb/find_mount_point.c
+++ b/libbb/find_mount_point.c
@@ -17,7 +17,7 @@
* Given any other file (or directory), find the mount table entry for its
* filesystem.
*/
-struct mntent* FAST_FUNC find_mount_point(const char *name, const char *table)
+struct mntent* FAST_FUNC find_mount_point(const char *name)
{
struct stat s;
dev_t mountDevice;
@@ -25,27 +25,35 @@ struct mntent* FAST_FUNC find_mount_point(const char *name, const char *table)
struct mntent *mountEntry;
if (stat(name, &s) != 0)
- return 0;
+ return NULL;
- if ((s.st_mode & S_IFMT) == S_IFBLK)
+ if (S_ISBLK(s.st_mode))
mountDevice = s.st_rdev;
else
mountDevice = s.st_dev;
- mountTable = setmntent(table ? table : bb_path_mtab_file, "r");
+ mountTable = setmntent(bb_path_mtab_file, "r");
if (!mountTable)
return 0;
- while ((mountEntry = getmntent(mountTable)) != 0) {
+ while ((mountEntry = getmntent(mountTable)) != NULL) {
+ /* rootfs mount in Linux 2.6 exists always,
+ * and it makes sense to always ignore it.
+ * Otherwise people can't reference their "real" root! */
+ if (strcmp(mountEntry->mnt_fsname, "rootfs") == 0)
+ continue;
+
if (strcmp(name, mountEntry->mnt_dir) == 0
|| strcmp(name, mountEntry->mnt_fsname) == 0
) { /* String match. */
break;
}
- if (stat(mountEntry->mnt_fsname, &s) == 0 && s.st_rdev == mountDevice) /* Match the device. */
+ /* Match the device. */
+ if (stat(mountEntry->mnt_fsname, &s) == 0 && s.st_rdev == mountDevice)
break;
- if (stat(mountEntry->mnt_dir, &s) == 0 && s.st_dev == mountDevice) /* Match the directory's mount point. */
+ /* Match the directory's mount point. */
+ if (stat(mountEntry->mnt_dir, &s) == 0 && s.st_dev == mountDevice)
break;
}
endmntent(mountTable);