mount.nfs: Error handling clean-up
authorChuck Lever <chuck.lever@oracle.com>
Mon, 16 Jul 2007 20:29:22 +0000 (16:29 -0400)
committerNeil Brown <neilb@suse.de>
Fri, 20 Jul 2007 06:19:21 +0000 (16:19 +1000)
o  Use nfs_error( _() ) instead of fprintf(stderr,
o  Use the mount return code macros instead of bare integers
o  Free mount_point after it has been canonicalized

Signed-off-by: Chuck Lever <chuck.lever@oracle.com>
Signed-off-by: Neil Brown <neilb@suse.de>
utils/mount/mount.c
utils/mount/nfsumount.c

index dde4562..d5e5cea 100644 (file)
@@ -367,22 +367,22 @@ int main(int argc, char *argv[])
        if(!strncmp(progname, "umount", strlen("umount"))) {
                if(argc < 2) {
                        umount_usage();
-                       exit(1);
+                       exit(EX_USAGE);
                }
                exit(nfsumount(argc, argv));
        }
 
-       if(argv[1] && argv[1][0] == '-') {
+       if (argv[1] && argv[1][0] == '-') {
                if(argv[1][1] == 'V')
                        printf("%s ("PACKAGE_STRING")\n", progname);
                else
                        mount_usage();
-               return 0;
+               exit(0);
        }
 
        if ((argc < 3)) {
                mount_usage();
-               exit(1);
+               exit(EX_USAGE);
        }
 
        spec = argv[1];
@@ -422,13 +422,13 @@ int main(int argc, char *argv[])
                case 'h':
                default:
                        mount_usage();
-                       exit(1);
+                       exit(EX_USAGE);
                }
        }
        if (optind != argc-2) {
                /* Extra non-option words at the end... */
                mount_usage();
-               exit(1);
+               exit(EX_USAGE);
        }
 
        if (strcmp(progname, "mount.nfs4") == 0)
@@ -445,9 +445,9 @@ int main(int argc, char *argv[])
                if ((mc = getfsfile(mount_point)) == NULL ||
                    strcmp(mc->m.mnt_fsname, spec) != 0 ||
                    strcmp(mc->m.mnt_type, fs_type) != 0) {
-                       fprintf(stderr, "%s: permission denied: no match for %s "
-                               "found in /etc/fstab\n", progname, mount_point);
-                       exit(1);
+                       nfs_error(_("%s: permission denied: no match for %s "
+                               "found in /etc/fstab"), progname, mount_point);
+                       exit(EX_USAGE);
                }
 
                /*
@@ -460,24 +460,31 @@ int main(int argc, char *argv[])
        }
 
        mount_point = canonicalize(mount_point);
-       if (mount_point == NULL ||
-           mount_point[0] != '/') {
-               fprintf(stderr, "%s: unknown mount point %s\n",
-                       progname, mount_point ? : "");
-               exit(1);
+       if (!mount_point) {
+               nfs_error(_("%s: no mount point provided"), progname);
+               exit(EX_USAGE);
        }
-       
+       if (mount_point[0] != '/') {
+               nfs_error(_("%s: unrecognized mount point %s"),
+                       progname, mount_point);
+               mnt_err = EX_USAGE;
+               goto out;
+       }
+
        parse_opts(mount_opts, &flags, &extra_opts);
 
        if (uid != 0) {
-           if (! (flags & (MS_USERS | MS_USER))) {
-                   fprintf(stderr, "%s: permission denied\n", progname);
-                   exit(1);
-           }
+               if (!(flags & (MS_USERS|MS_USER))) {
+                       nfs_error(_("%s: permission denied"), progname);
+                       mnt_err = EX_USAGE;
+                       goto out;
+               }
        }
 
-       if (chk_mountpoint(mount_point))
-               exit(EX_FAIL);
+       if (chk_mountpoint(mount_point)) {
+               mnt_err = EX_USAGE;
+               goto out;
+       }
 
        if (strcmp(fs_type, "nfs4") == 0)
                mnt_err = nfs4mount(spec, mount_point, flags, &extra_opts, fake);
@@ -494,6 +501,8 @@ int main(int argc, char *argv[])
                mnt_err = add_mtab(spec, mount_point, fs_type, flags, extra_opts,
                                0, 0 /* these are always zero for NFS */ );
 
+out:
+       free(mount_point);
        exit(mnt_err);
 }
 
index 97b96e8..1b3c8d1 100644 (file)
@@ -157,7 +157,7 @@ int del_mtab(const char *spec, const char *node)
 
         if (umnt_err)
                 umount_error(umnt_err, node);
-        return 1;
+        return EX_FILEIO;
 }
 
 /*
@@ -307,7 +307,7 @@ int nfsumount(int argc, char *argv[])
            strcmp(mc->m.mnt_type, "nfs4") != 0) {
                fprintf(stderr, "umount.nfs: %s on %s it not an nfs filesystem\n",
                        mc->m.mnt_fsname, mc->m.mnt_dir);
-               exit(1);
+               return EX_USAGE;
        }
 
        if (getuid() != 0) {
@@ -355,6 +355,6 @@ int nfsumount(int argc, char *argv[])
        } else
                ret = del_mtab(NULL, spec);
 
-       return(ret);
+       return ret;
 }