diff options
Diffstat (limited to 'freebsd/sys/fs/nfsclient/nfs_clrpcops.c')
-rw-r--r-- | freebsd/sys/fs/nfsclient/nfs_clrpcops.c | 67 |
1 files changed, 65 insertions, 2 deletions
diff --git a/freebsd/sys/fs/nfsclient/nfs_clrpcops.c b/freebsd/sys/fs/nfsclient/nfs_clrpcops.c index 8feb2a8b..e3101f76 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,41 +2961,57 @@ 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; dp->d_namlen = 1; +#ifndef __rtems__ *((uint64_t *)dp->d_name) = 0; /* Zero pad it. */ +#else /* __rtems__ */ + dp->d_name[1] = '\0'; +#endif /* __rtems__ */ dp->d_name[0] = '.'; dp->d_reclen = _GENERIC_DIRSIZ(dp) + NFSX_HYPER; /* * Just make these offset cookie 0. */ +#ifndef __rtems__ tl = (u_int32_t *)&dp->d_name[8]; *tl++ = 0; *tl = 0; +#endif /* __rtems__ */ blksiz += dp->d_reclen; uio_uio_resid_add(uiop, -(dp->d_reclen)); uiop->uio_offset += dp->d_reclen; 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; dp->d_namlen = 2; +#ifndef __rtems__ *((uint64_t *)dp->d_name) = 0; +#else __rtems__ + dp->d_name[2] = '\0'; +#endif /* __rtems__ */ dp->d_name[0] = '.'; dp->d_name[1] = '.'; dp->d_reclen = _GENERIC_DIRSIZ(dp) + NFSX_HYPER; /* * Just make these offset cookie 0. */ +#ifndef __rtems__ tl = (u_int32_t *)&dp->d_name[8]; *tl++ = 0; *tl = 0; +#endif /* __rtems__ */ blksiz += dp->d_reclen; uio_uio_resid_add(uiop, -(dp->d_reclen)); uiop->uio_offset += dp->d_reclen; @@ -3106,7 +3124,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 +3147,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)); @@ -3242,9 +3266,14 @@ nfsrpc_readdir(vnode_t vp, struct uio *uiop, nfsuint64 *cookiep, dp = (struct dirent *)uio_iov_base(uiop); NFSBZERO(dp, DIRBLKSIZ); dp->d_type = DT_UNKNOWN; +#ifndef __rtems__ tl = (u_int32_t *)&dp->d_name[4]; *tl++ = cookie.lval[0]; *tl = cookie.lval[1]; +#else /* __rtems__ */ + memcpy(&dp->d_name[8], &cookie.lval[0], sizeof(u_int32_t)); + memcpy(&dp->d_name[8 + sizeof(u_int32_t)], &cookie.lval[1], sizeof(u_int32_t)); +#endif /* __rtems__ */ dp->d_reclen = DIRBLKSIZ; uio_iov_base_add(uiop, DIRBLKSIZ); uio_iov_len_add(uiop, -(DIRBLKSIZ)); @@ -3396,41 +3425,61 @@ 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; dp->d_namlen = 1; +#ifndef __rtems__ *((uint64_t *)dp->d_name) = 0; /* Zero pad it. */ +#else /* __rtems__ */ + dp->d_name[0] = dp->d_name[1] = dp->d_name[2] = dp->d_name[3] = '\0'; +#endif /* __rtems__ */ dp->d_name[0] = '.'; dp->d_reclen = _GENERIC_DIRSIZ(dp) + NFSX_HYPER; /* * Just make these offset cookie 0. */ +#ifndef __rtems__ tl = (u_int32_t *)&dp->d_name[8]; *tl++ = 0; *tl = 0; +#else /* __rtems__ */ + memset(&dp->d_name[8], 0, 2 * sizeof(u_int32_t)); +#endif /* __rtems__ */ blksiz += dp->d_reclen; uio_uio_resid_add(uiop, -(dp->d_reclen)); uiop->uio_offset += dp->d_reclen; 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; dp->d_namlen = 2; +#ifndef __rtems__ *((uint64_t *)dp->d_name) = 0; +#else /* __rtems__ */ + dp->d_name[0] = dp->d_name[1] = dp->d_name[2] = dp->d_name[3] = '\0'; +#endif /* __rtems__ */ dp->d_name[0] = '.'; dp->d_name[1] = '.'; dp->d_reclen = _GENERIC_DIRSIZ(dp) + NFSX_HYPER; /* * Just make these offset cookie 0. */ +#ifndef __rtems__ tl = (u_int32_t *)&dp->d_name[8]; *tl++ = 0; *tl = 0; +#else /* __rtems__ */ + memset(&dp->d_name[8], 0, 2 * sizeof(u_int32_t)); +#endif /* __rtems__ */ blksiz += dp->d_reclen; uio_uio_resid_add(uiop, -(dp->d_reclen)); uiop->uio_offset += dp->d_reclen; @@ -3524,7 +3573,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) + @@ -3745,9 +3796,14 @@ nfsrpc_readdirplus(vnode_t vp, struct uio *uiop, nfsuint64 *cookiep, dp = (struct dirent *)uio_iov_base(uiop); NFSBZERO(dp, DIRBLKSIZ); dp->d_type = DT_UNKNOWN; +#ifndef __rtems__ tl = (u_int32_t *)&dp->d_name[4]; *tl++ = cookie.lval[0]; *tl = cookie.lval[1]; +#else /* __rtems__ */ + memcpy(&dp->d_name[8], &cookie.lval[0], sizeof(u_int32_t)); + memcpy(&dp->d_name[8 + sizeof(u_int32_t)], &cookie.lval[1], sizeof(u_int32_t)); +#endif /* __rtems__ */ dp->d_reclen = DIRBLKSIZ; uio_iov_base_add(uiop, DIRBLKSIZ); uio_iov_len_add(uiop, -(DIRBLKSIZ)); @@ -4670,8 +4726,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 +7727,3 @@ out: } return (laystat); } - |