]> git.decadent.org.uk Git - nfs-utils.git/blobdiff - utils/mount/mount.c
revert
[nfs-utils.git] / utils / mount / mount.c
index f3f0a8310164a02a860aa48b9ae13cfc2a1da6af..cc078eba336db7f47ad7bae1a5e9f6826ec0a973 100644 (file)
@@ -203,6 +203,13 @@ create_mtab (void) {
        int flags;
        mntFILE *mfp;
 
+       /* Avoid writing if the mtab is a symlink to /proc/mounts, since
+          that would create a file /proc/mounts in case the proc filesystem
+          is not mounted, and the fchmod below would also fail. */
+       if (mtab_is_a_symlink()) {
+               return EX_SUCCESS;
+       }
+
        lock_mtab();
 
        mfp = nfs_setmntent (MOUNTED, "a+");
@@ -374,7 +381,7 @@ static int try_mount(char *spec, char *mount_point, int flags,
 int main(int argc, char *argv[])
 {
        int c, flags = 0, mnt_err = 1, fake = 0;
-       char *spec, *mount_point, *fs_type = "nfs";
+       char *spec = NULL, *mount_point = NULL, *fs_type = "nfs";
        char *extra_opts = NULL, *mount_opts = NULL;
        uid_t uid = getuid();
 
@@ -385,26 +392,14 @@ int main(int argc, char *argv[])
        if(!strncmp(progname, "umount", strlen("umount")))
                exit(nfsumount(argc, argv));
 
-       if (argv[1] && argv[1][0] == '-') {
-               if(argv[1][1] == 'V')
-                       printf("%s ("PACKAGE_STRING")\n", progname);
-               else
-                       mount_usage();
-               exit(EX_SUCCESS);
-       }
-
        if ((argc < 3)) {
                mount_usage();
                exit(EX_USAGE);
        }
 
-       spec = argv[1];
-       mount_point = argv[2];
-
        mount_config_init(progname);
 
-       argv[2] = argv[0]; /* so that getopt error messages are correct */
-       while ((c = getopt_long(argc - 2, argv + 2, "rvVwfno:hs",
+       while ((c = getopt_long(argc, argv, "rvVwfno:hs",
                                longopts, NULL)) != -1) {
                switch (c) {
                case 'r':
@@ -447,6 +442,14 @@ int main(int argc, char *argv[])
        if (optind != argc - 2) {
                mount_usage();
                goto out_usage;
+       } else {
+               while (optind < argc) {
+                       if (!spec)
+                               spec = argv[optind];
+                       else
+                               mount_point = argv[optind];
+                       optind++;
+               }
        }
 
        if (strcmp(progname, "mount.nfs4") == 0)