summaryrefslogtreecommitdiffstats
path: root/sys/nfsserver/nfs_srvsubs.c
diff options
context:
space:
mode:
authorphk <phk@FreeBSD.org>2002-08-21 19:28:44 +0000
committerphk <phk@FreeBSD.org>2002-08-21 19:28:44 +0000
commitd5c3cc895c3d8251363da06e4b7ce25e3a646754 (patch)
treeb648de3b1cb3571b52bad5824f6441d72f2f7c76 /sys/nfsserver/nfs_srvsubs.c
parenteb79b6a23b52be0104b1bef2bea214428cc54aaa (diff)
downloadFreeBSD-src-d5c3cc895c3d8251363da06e4b7ce25e3a646754.zip
FreeBSD-src-d5c3cc895c3d8251363da06e4b7ce25e3a646754.tar.gz
Make the V2 errno translation more resistent to new errnos.
Diffstat (limited to 'sys/nfsserver/nfs_srvsubs.c')
-rw-r--r--sys/nfsserver/nfs_srvsubs.c43
1 files changed, 22 insertions, 21 deletions
diff --git a/sys/nfsserver/nfs_srvsubs.c b/sys/nfsserver/nfs_srvsubs.c
index 19a74d7..1e06e3e 100644
--- a/sys/nfsserver/nfs_srvsubs.c
+++ b/sys/nfsserver/nfs_srvsubs.c
@@ -165,28 +165,25 @@ int nfsrvv2_procid[NFS_NPROCS] = {
/*
* Maps errno values to nfs error numbers.
- * Use NFSERR_IO as the catch all for ones not specifically defined in
- * RFC 1094.
+ * Use 0 (which gets converted to NFSERR_IO) as the catch all for ones not
+ * specifically defined in RFC 1094.
*/
static u_char nfsrv_v2errmap[ELAST] = {
- NFSERR_PERM, NFSERR_NOENT, NFSERR_IO, NFSERR_IO, NFSERR_IO,
- NFSERR_NXIO, NFSERR_IO, NFSERR_IO, NFSERR_IO, NFSERR_IO,
- NFSERR_IO, NFSERR_IO, NFSERR_ACCES, NFSERR_IO, NFSERR_IO,
- NFSERR_IO, NFSERR_EXIST, NFSERR_IO, NFSERR_NODEV, NFSERR_NOTDIR,
- NFSERR_ISDIR, NFSERR_IO, NFSERR_IO, NFSERR_IO, NFSERR_IO,
- NFSERR_IO, NFSERR_FBIG, NFSERR_NOSPC, NFSERR_IO, NFSERR_ROFS,
- NFSERR_IO, NFSERR_IO, NFSERR_IO, NFSERR_IO, NFSERR_IO,
- NFSERR_IO, NFSERR_IO, NFSERR_IO, NFSERR_IO, NFSERR_IO,
- NFSERR_IO, NFSERR_IO, NFSERR_IO, NFSERR_IO, NFSERR_IO,
- NFSERR_IO, NFSERR_IO, NFSERR_IO, NFSERR_IO, NFSERR_IO,
- NFSERR_IO, NFSERR_IO, NFSERR_IO, NFSERR_IO, NFSERR_IO,
- NFSERR_IO, NFSERR_IO, NFSERR_IO, NFSERR_IO, NFSERR_IO,
- NFSERR_IO, NFSERR_IO, NFSERR_NAMETOL, NFSERR_IO, NFSERR_IO,
- NFSERR_NOTEMPTY, NFSERR_IO, NFSERR_IO, NFSERR_DQUOT, NFSERR_STALE,
- NFSERR_IO, NFSERR_IO, NFSERR_IO, NFSERR_IO, NFSERR_IO,
- NFSERR_IO, NFSERR_IO, NFSERR_IO, NFSERR_IO, NFSERR_IO,
- NFSERR_IO, NFSERR_IO, NFSERR_IO, NFSERR_IO, NFSERR_IO,
- NFSERR_IO /* << Last is 86 */
+ NFSERR_PERM, NFSERR_NOENT, 0, 0, 0,
+ NFSERR_NXIO, 0, 0, 0, 0,
+ 0, 0, NFSERR_ACCES, 0, 0,
+ 0, NFSERR_EXIST, 0, NFSERR_NODEV, NFSERR_NOTDIR,
+ NFSERR_ISDIR, 0, 0, 0, 0,
+ 0, NFSERR_FBIG, NFSERR_NOSPC, 0, NFSERR_ROFS,
+ 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0,
+ 0, 0, NFSERR_NAMETOL, 0, 0,
+ NFSERR_NOTEMPTY, 0, 0, NFSERR_DQUOT, NFSERR_STALE,
+ 0
};
/*
@@ -1150,6 +1147,7 @@ int
nfsrv_errmap(struct nfsrv_descript *nd, int err)
{
short *defaulterrp, *errp;
+ int e;
if (nd->nd_flag & ND_NFSV3) {
if (nd->nd_procnum <= NFSPROC_COMMIT) {
@@ -1164,8 +1162,11 @@ nfsrv_errmap(struct nfsrv_descript *nd, int err)
} else
return (err & 0xffff);
}
+ e = 0;
if (err <= ELAST)
- return ((int)nfsrv_v2errmap[err - 1]);
+ e = nfsrv_v2errmap[err - 1];
+ if (e != 0)
+ return (e);
return (NFSERR_IO);
}
OpenPOWER on IntegriCloud