diff options
Diffstat (limited to 'util-linux')
| -rw-r--r-- | util-linux/mount.c | 38 |
1 files changed, 20 insertions, 18 deletions
diff --git a/util-linux/mount.c b/util-linux/mount.c index 77382ff51..ee45f01a6 100644 --- a/util-linux/mount.c +++ b/util-linux/mount.c | |||
| @@ -1386,14 +1386,16 @@ static int singlemount(struct mntent *mp, int ignore_busy) | |||
| 1386 | 1386 | ||
| 1387 | // Treat fstype "auto" as unspecified. | 1387 | // Treat fstype "auto" as unspecified. |
| 1388 | 1388 | ||
| 1389 | if (mp->mnt_type && !strcmp(mp->mnt_type,"auto")) mp->mnt_type = 0; | 1389 | if (mp->mnt_type && strcmp(mp->mnt_type,"auto") == 0) |
| 1390 | mp->mnt_type = 0; | ||
| 1390 | 1391 | ||
| 1391 | // Might this be an CIFS filesystem? | 1392 | // Might this be an CIFS filesystem? |
| 1392 | 1393 | ||
| 1393 | if (ENABLE_FEATURE_MOUNT_CIFS && | 1394 | if (ENABLE_FEATURE_MOUNT_CIFS |
| 1394 | (!mp->mnt_type || !strcmp(mp->mnt_type,"cifs")) && | 1395 | && (!mp->mnt_type || strcmp(mp->mnt_type,"cifs") == 0) |
| 1395 | (mp->mnt_fsname[0]==mp->mnt_fsname[1] && (mp->mnt_fsname[0]=='/' || mp->mnt_fsname[0]=='\\'))) | 1396 | && (mp->mnt_fsname[0]=='/' || mp->mnt_fsname[0]=='\\') |
| 1396 | { | 1397 | && mp->mnt_fsname[0]==mp->mnt_fsname[1] |
| 1398 | ) { | ||
| 1397 | struct hostent *he; | 1399 | struct hostent *he; |
| 1398 | char ip[32], *s; | 1400 | char ip[32], *s; |
| 1399 | 1401 | ||
| @@ -1407,7 +1409,7 @@ static int singlemount(struct mntent *mp, int ignore_busy) | |||
| 1407 | 1409 | ||
| 1408 | s = strrchr(mp->mnt_fsname, '\\'); | 1410 | s = strrchr(mp->mnt_fsname, '\\'); |
| 1409 | if (s == mp->mnt_fsname+1) goto report_error; | 1411 | if (s == mp->mnt_fsname+1) goto report_error; |
| 1410 | *s = 0; | 1412 | *s = '\0'; |
| 1411 | he = gethostbyname(mp->mnt_fsname+2); | 1413 | he = gethostbyname(mp->mnt_fsname+2); |
| 1412 | *s = '\\'; | 1414 | *s = '\\'; |
| 1413 | if (!he) goto report_error; | 1415 | if (!he) goto report_error; |
| @@ -1434,10 +1436,10 @@ static int singlemount(struct mntent *mp, int ignore_busy) | |||
| 1434 | 1436 | ||
| 1435 | // Might this be an NFS filesystem? | 1437 | // Might this be an NFS filesystem? |
| 1436 | 1438 | ||
| 1437 | if (ENABLE_FEATURE_MOUNT_NFS && | 1439 | if (ENABLE_FEATURE_MOUNT_NFS |
| 1438 | (!mp->mnt_type || !strcmp(mp->mnt_type,"nfs")) && | 1440 | && (!mp->mnt_type || !strcmp(mp->mnt_type,"nfs")) |
| 1439 | strchr(mp->mnt_fsname, ':') != NULL) | 1441 | && strchr(mp->mnt_fsname, ':') != NULL |
| 1440 | { | 1442 | ) { |
| 1441 | rc = nfsmount(mp, vfsflags, filteropts); | 1443 | rc = nfsmount(mp, vfsflags, filteropts); |
| 1442 | goto report_error; | 1444 | goto report_error; |
| 1443 | } | 1445 | } |
| @@ -1445,8 +1447,9 @@ static int singlemount(struct mntent *mp, int ignore_busy) | |||
| 1445 | // Look at the file. (Not found isn't a failure for remount, or for | 1447 | // Look at the file. (Not found isn't a failure for remount, or for |
| 1446 | // a synthetic filesystem like proc or sysfs.) | 1448 | // a synthetic filesystem like proc or sysfs.) |
| 1447 | 1449 | ||
| 1448 | if (!lstat(mp->mnt_fsname, &st) && !(vfsflags & (MS_REMOUNT | MS_BIND | MS_MOVE))) | 1450 | if (!lstat(mp->mnt_fsname, &st) |
| 1449 | { | 1451 | && !(vfsflags & (MS_REMOUNT | MS_BIND | MS_MOVE)) |
| 1452 | ) { | ||
| 1450 | // Do we need to allocate a loopback device for it? | 1453 | // Do we need to allocate a loopback device for it? |
| 1451 | 1454 | ||
| 1452 | if (ENABLE_FEATURE_MOUNT_LOOP && S_ISREG(st.st_mode)) { | 1455 | if (ENABLE_FEATURE_MOUNT_LOOP && S_ISREG(st.st_mode)) { |
| @@ -1474,10 +1477,9 @@ static int singlemount(struct mntent *mp, int ignore_busy) | |||
| 1474 | 1477 | ||
| 1475 | if (mp->mnt_type || (vfsflags & (MS_REMOUNT | MS_BIND | MS_MOVE))) | 1478 | if (mp->mnt_type || (vfsflags & (MS_REMOUNT | MS_BIND | MS_MOVE))) |
| 1476 | rc = mount_it_now(mp, vfsflags, filteropts); | 1479 | rc = mount_it_now(mp, vfsflags, filteropts); |
| 1477 | |||
| 1478 | // Loop through filesystem types until mount succeeds or we run out | ||
| 1479 | |||
| 1480 | else { | 1480 | else { |
| 1481 | // Loop through filesystem types until mount succeeds | ||
| 1482 | // or we run out | ||
| 1481 | 1483 | ||
| 1482 | /* Initialize list of block backed filesystems. This has to be | 1484 | /* Initialize list of block backed filesystems. This has to be |
| 1483 | * done here so that during "mount -a", mounts after /proc shows up | 1485 | * done here so that during "mount -a", mounts after /proc shows up |
| @@ -1612,9 +1614,9 @@ int mount_main(int argc, char **argv) | |||
| 1612 | 1614 | ||
| 1613 | // If we have a shared subtree flag, don't worry about fstab or mtab. | 1615 | // If we have a shared subtree flag, don't worry about fstab or mtab. |
| 1614 | 1616 | ||
| 1615 | if (ENABLE_FEATURE_MOUNT_FLAGS && | 1617 | if (ENABLE_FEATURE_MOUNT_FLAGS |
| 1616 | (i & (MS_SHARED | MS_PRIVATE | MS_SLAVE | MS_UNBINDABLE))) | 1618 | && (i & (MS_SHARED | MS_PRIVATE | MS_SLAVE | MS_UNBINDABLE)) |
| 1617 | { | 1619 | ) { |
| 1618 | rc = mount("", argv[0], "", i, ""); | 1620 | rc = mount("", argv[0], "", i, ""); |
| 1619 | if (rc) bb_perror_msg_and_die("%s", argv[0]); | 1621 | if (rc) bb_perror_msg_and_die("%s", argv[0]); |
| 1620 | goto clean_up; | 1622 | goto clean_up; |
