summaryrefslogtreecommitdiffstats
path: root/freebsd/sys/fs/nfsclient/nfs_clrpcops.c
diff options
context:
space:
mode:
Diffstat (limited to 'freebsd/sys/fs/nfsclient/nfs_clrpcops.c')
-rw-r--r--freebsd/sys/fs/nfsclient/nfs_clrpcops.c67
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);
}
-