summaryrefslogtreecommitdiff
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.c29
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);
}
-