patch-2.1.32 linux/net/sunrpc/xdr.c
Next file: linux/net/sunrpc/xprt.c
Previous file: linux/net/sunrpc/sysctl.c
Back to the patch index
Back to the overall index
- Lines: 119
- Date:
Thu Dec 19 09:04:19 1996
- Orig file:
v2.1.31/linux/net/sunrpc/xdr.c
- Orig date:
Wed Dec 31 16:00:00 1969
diff -u --recursive --new-file v2.1.31/linux/net/sunrpc/xdr.c linux/net/sunrpc/xdr.c
@@ -0,0 +1,118 @@
+/*
+ * linux/net/sunrpc/xdr.c
+ *
+ * Generic XDR support.
+ *
+ * Copyright (C) 1995, 1996 Olaf Kirch <okir@monad.swb.de>
+ */
+
+#include <linux/types.h>
+#include <linux/socket.h>
+#include <linux/string.h>
+#include <linux/in.h>
+#include <linux/sunrpc/xdr.h>
+#include <linux/sunrpc/msg_prot.h>
+
+u32 rpc_success, rpc_prog_unavail, rpc_prog_mismatch, rpc_proc_unavail,
+ rpc_garbage_args, rpc_system_err;
+u32 rpc_auth_ok, rpc_autherr_badcred, rpc_autherr_rejectedcred,
+ rpc_autherr_badverf, rpc_autherr_rejectedverf, rpc_autherr_tooweak;
+u32 xdr_zero, xdr_one, xdr_two;
+
+void
+xdr_init(void)
+{
+ static int inited = 0;
+
+ if (inited)
+ return;
+
+ xdr_zero = htonl(0);
+ xdr_one = htonl(1);
+ xdr_two = htonl(2);
+
+ rpc_success = htonl(RPC_SUCCESS);
+ rpc_prog_unavail = htonl(RPC_PROG_UNAVAIL);
+ rpc_prog_mismatch = htonl(RPC_PROG_MISMATCH);
+ rpc_proc_unavail = htonl(RPC_PROC_UNAVAIL);
+ rpc_garbage_args = htonl(RPC_GARBAGE_ARGS);
+ rpc_system_err = htonl(RPC_SYSTEM_ERR);
+
+ rpc_auth_ok = htonl(RPC_AUTH_OK);
+ rpc_autherr_badcred = htonl(RPC_AUTH_BADCRED);
+ rpc_autherr_rejectedcred = htonl(RPC_AUTH_REJECTEDCRED);
+ rpc_autherr_badverf = htonl(RPC_AUTH_BADVERF);
+ rpc_autherr_rejectedverf = htonl(RPC_AUTH_REJECTEDVERF);
+ rpc_autherr_tooweak = htonl(RPC_AUTH_TOOWEAK);
+
+ inited = 1;
+}
+
+/*
+ * XDR functions for basic NFS types
+ */
+u32 *
+xdr_encode_netobj(u32 *p, const struct xdr_netobj *obj)
+{
+ unsigned int quadlen = XDR_QUADLEN(obj->len);
+
+ *p++ = htonl(obj->len);
+ p[quadlen-1] = 0; /* zero trailing bytes */
+ memcpy(p, obj->data, obj->len);
+ return p + XDR_QUADLEN(obj->len);
+}
+
+u32 *
+xdr_decode_netobj_fixed(u32 *p, void *obj, unsigned int len)
+{
+ if (ntohl(*p++) != len)
+ return NULL;
+ memcpy(obj, p, len);
+ return p + XDR_QUADLEN(len);
+}
+
+u32 *
+xdr_decode_netobj(u32 *p, struct xdr_netobj *obj)
+{
+ unsigned int len;
+
+ if ((len = ntohl(*p++)) > XDR_MAX_NETOBJ)
+ return NULL;
+ obj->len = len;
+ obj->data = (u8 *) p;
+ return p + XDR_QUADLEN(len);
+}
+
+u32 *
+xdr_encode_string(u32 *p, const char *string)
+{
+ int len = strlen(string);
+ int quadlen = XDR_QUADLEN(len);
+
+ p[quadlen] = 0;
+ *p++ = htonl(len);
+ memcpy(p, string, len);
+ return p + quadlen;
+}
+
+u32 *
+xdr_decode_string(u32 *p, char **sp, int *lenp, int maxlen)
+{
+ unsigned int len;
+ char *string;
+
+ if ((len = ntohl(*p++)) > maxlen)
+ return NULL;
+ if (lenp)
+ *lenp = len;
+ if ((len % 4) != 0) {
+ string = (char *) p;
+ } else {
+ string = (char *) (p - 1);
+ memmove(string, p, len);
+ }
+ string[len] = '\0';
+ *sp = string;
+ return p + XDR_QUADLEN(len);
+}
+
FUNET's LINUX-ADM group, linux-adm@nic.funet.fi
TCL-scripts by Sam Shen, slshen@lbl.gov