diff options
Diffstat (limited to 'freebsd/sys/fs/nfsclient/nfs_clrpcops.c')
-rw-r--r-- | freebsd/sys/fs/nfsclient/nfs_clrpcops.c | 29 |
1 files changed, 27 insertions, 2 deletions
diff --git a/freebsd/sys/fs/nfsclient/nfs_clrpcops.c b/freebsd/sys/fs/nfsclient/nfs_clrpcops.c index 8feb2a8b..dcd5b53a 100644 --- a/freebsd/sys/fs/nfsclient/nfs_clrpcops.c +++ b/freebsd/sys/fs/nfsclient/nfs_clrpcops.c @@ -1,3 +1,5 @@ +#include <machine/rtems-bsd-kernel-space.h> + /*- * SPDX-License-Identifier: BSD-3-Clause * @@ -45,7 +47,7 @@ __FBSDID("$FreeBSD$"); */ #ifndef APPLEKEXT -#include "opt_inet6.h" +#include <rtems/bsd/local/opt_inet6.h> #include <fs/nfs/nfsport.h> #include <sys/sysctl.h> @@ -2959,7 +2961,9 @@ nfsrpc_readdir(vnode_t vp, struct uio *uiop, nfsuint64 *cookiep, return (error); nd->nd_mrep = NULL; dp = (struct dirent *)uio_iov_base(uiop); +#ifndef __rtems__ dp->d_pad0 = dp->d_pad1 = 0; +#endif /* __rtems__ */ dp->d_off = 0; dp->d_type = DT_DIR; dp->d_fileno = dotfileid; @@ -2979,7 +2983,9 @@ nfsrpc_readdir(vnode_t vp, struct uio *uiop, nfsuint64 *cookiep, uio_iov_base_add(uiop, dp->d_reclen); uio_iov_len_add(uiop, -(dp->d_reclen)); dp = (struct dirent *)uio_iov_base(uiop); +#ifndef __rtems__ dp->d_pad0 = dp->d_pad1 = 0; +#endif /* __rtems__ */ dp->d_off = 0; dp->d_type = DT_DIR; dp->d_fileno = dotdotfileid; @@ -3106,7 +3112,9 @@ nfsrpc_readdir(vnode_t vp, struct uio *uiop, nfsuint64 *cookiep, bigenough = 0; if (bigenough) { dp = (struct dirent *)uio_iov_base(uiop); +#ifndef __rtems__ dp->d_pad0 = dp->d_pad1 = 0; +#endif /* __rtems__ */ dp->d_off = 0; dp->d_namlen = len; dp->d_reclen = _GENERIC_DIRLEN(len) + @@ -3127,6 +3135,10 @@ nfsrpc_readdir(vnode_t vp, struct uio *uiop, nfsuint64 *cookiep, NFSBZERO(cp, tlen); cp += tlen; /* points to cookie storage */ tl2 = (u_int32_t *)cp; +#ifdef __rtems__ + tlen = dp->d_reclen - + (((char*) uio_iov_base(uiop) - (char*) dp) + NFSX_HYPER); +#endif /* __rtems__ */ uio_iov_base_add(uiop, (tlen + NFSX_HYPER)); uio_iov_len_add(uiop, -(tlen + NFSX_HYPER)); uio_uio_resid_add(uiop, -(tlen + NFSX_HYPER)); @@ -3396,7 +3408,9 @@ nfsrpc_readdirplus(vnode_t vp, struct uio *uiop, nfsuint64 *cookiep, return (error); nd->nd_mrep = NULL; dp = (struct dirent *)uio_iov_base(uiop); +#ifndef __rtems__ dp->d_pad0 = dp->d_pad1 = 0; +#endif /* __rtems__ */ dp->d_off = 0; dp->d_type = DT_DIR; dp->d_fileno = dotfileid; @@ -3416,7 +3430,9 @@ nfsrpc_readdirplus(vnode_t vp, struct uio *uiop, nfsuint64 *cookiep, uio_iov_base_add(uiop, dp->d_reclen); uio_iov_len_add(uiop, -(dp->d_reclen)); dp = (struct dirent *)uio_iov_base(uiop); +#ifndef __rtems__ dp->d_pad0 = dp->d_pad1 = 0; +#endif /* __rtems__ */ dp->d_off = 0; dp->d_type = DT_DIR; dp->d_fileno = dotdotfileid; @@ -3524,7 +3540,9 @@ nfsrpc_readdirplus(vnode_t vp, struct uio *uiop, nfsuint64 *cookiep, bigenough = 0; if (bigenough) { dp = (struct dirent *)uio_iov_base(uiop); +#ifndef __rtems__ dp->d_pad0 = dp->d_pad1 = 0; +#endif /* __rtems__ */ dp->d_off = 0; dp->d_namlen = len; dp->d_reclen = _GENERIC_DIRLEN(len) + @@ -4670,8 +4688,16 @@ nfsrpc_exchangeid(struct nfsmount *nmp, struct nfsclclient *clp, /* Set the implementation id4 */ *tl = txdr_unsigned(1); +#ifndef __rtems__ (void) nfsm_strtom(nd, "freebsd.org", strlen("freebsd.org")); (void) nfsm_strtom(nd, version, strlen(version)); +#else /* __rtems__ */ + { + const char* rv = rtems_version(); + (void) nfsm_strtom(nd, "rtems.org", strlen("rtems.org")); + (void) nfsm_strtom(nd, rv, strlen(rv)); + } +#endif /* __rtems__ */ NFSM_BUILD(tl, uint32_t *, NFSX_V4TIME); verstime.tv_sec = 1293840000; /* Jan 1, 2011 */ verstime.tv_nsec = 0; @@ -7663,4 +7689,3 @@ out: } return (laystat); } - |