summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorChuck Lever <chuck.lever@oracle.com>2007-07-28 17:50:04 -0400
committerNeil Brown <neilb@suse.de>2007-07-30 16:12:53 +1000
commitf5bab6c03c5205ef9d062f167cc30060f90fedc4 (patch)
treef066e00b7b6f430f28fd963b41c8fad6c8d70ee8
parent264c9705f48e145f9cb3575a953336dcd2161e49 (diff)
downloadnfs-utils-f5bab6c03c5205ef9d062f167cc30060f90fedc4.tar.gz
nfs-utils-f5bab6c03c5205ef9d062f167cc30060f90fedc4.tar.xz
nfs-utils-f5bab6c03c5205ef9d062f167cc30060f90fedc4.zip
umount.nfs: Make do_nfs_mount use conventional EX_ style return codes
do_nfs_mount() should return EX_ style return codes and not 1 or 0 in order to distinguish between usage errors and other problems (such as EX_FILEIO or RPC errors). Signed-off-by: Chuck Lever <chuck.lever@oracle.com> Signed-off-by: Neil Brown <neilb@suse.de>
-rw-r--r--utils/mount/nfsumount.c38
1 files changed, 26 insertions, 12 deletions
diff --git a/utils/mount/nfsumount.c b/utils/mount/nfsumount.c
index 18cd14b..fd4194f 100644
--- a/utils/mount/nfsumount.c
+++ b/utils/mount/nfsumount.c
@@ -121,9 +121,6 @@ static int del_mtab(const char *spec, const char *node)
return EX_FILEIO;
}
-/*
- * Returns 1 if everything went well, else 0.
- */
static int do_nfs_umount(const char *spec, char *opts)
{
char *hostname;
@@ -133,10 +130,20 @@ static int do_nfs_umount(const char *spec, char *opts)
struct pmap *pmap = &mnt_server.pmap;
char *p;
- if (spec == NULL || (p = strchr(spec,':')) == NULL)
- goto out_bad;
- hostname = xstrndup(spec, p-spec);
- dirname = xstrdup(p+1);
+ if (spec == NULL) {
+ nfs_error(_("%s: No NFS export name was provided"),
+ progname);
+ return EX_USAGE;
+ }
+
+ p = strchr(spec, ':');
+ if (p == NULL) {
+ nfs_error(_("%s: '%s' is not a legal NFS export name"),
+ progname, spec);
+ return EX_USAGE;
+ }
+ hostname = xstrndup(spec, p - spec);
+ dirname = xstrdup(p + 1);
#ifdef NFS_MOUNT_DEBUG
printf(_("host: %s, directory: %s\n"), hostname, dirname);
#endif
@@ -180,11 +187,18 @@ static int do_nfs_umount(const char *spec, char *opts)
if (opts && (hasmntopt(&mnt, "udp") || hasmntopt(&mnt, "proto=udp")))
pmap->pm_prot = IPPROTO_UDP;
- if (!nfs_gethostbyname(hostname, &mnt_server.saddr))
- goto out_bad;
- return nfs_call_umount(&mnt_server, &dirname);
- out_bad:
- nfs_error(_("%s: %s: not found or not mounted"), progname, spec);
+ if (!nfs_gethostbyname(hostname, &mnt_server.saddr)) {
+ nfs_error(_("%s: '%s' does not contain a recognized hostname"),
+ progname, spec);
+ return EX_USAGE;
+ }
+
+ if (!nfs_call_umount(&mnt_server, &dirname)) {
+ nfs_error(_("%s: Server failed to unmount '%s'"),
+ progname, spec);
+ return EX_USAGE;
+ }
+
return 0;
}