summary refs log tree commit diff
path: root/sunrpc
diff options
context:
space:
mode:
Diffstat (limited to 'sunrpc')
-rw-r--r--sunrpc/authuxprot.c1
-rw-r--r--sunrpc/pmap_rmt.c2
-rw-r--r--sunrpc/proto.h8
-rw-r--r--sunrpc/rpc/auth_unix.h4
-rw-r--r--sunrpc/rpc/clnt.h21
-rw-r--r--sunrpc/rpc/pmap_clnt.h12
-rw-r--r--sunrpc/rpc/pmap_rmt.h4
-rw-r--r--sunrpc/rpc/rpc_msg.h1
-rw-r--r--sunrpc/rpc/xdr.h20
-rw-r--r--sunrpc/rpc_cout.c75
-rw-r--r--sunrpc/rpc_parse.h6
-rw-r--r--sunrpc/rpc_svcout.c14
-rw-r--r--sunrpc/xdr.c15
-rw-r--r--sunrpc/xdr_float.c8
-rw-r--r--sunrpc/xdr_mem.c53
-rw-r--r--sunrpc/xdr_rec.c8
-rw-r--r--sunrpc/xdr_stdio.c10
17 files changed, 149 insertions, 113 deletions
diff --git a/sunrpc/authuxprot.c b/sunrpc/authuxprot.c
index d172ebc655..9f0242fcb0 100644
--- a/sunrpc/authuxprot.c
+++ b/sunrpc/authuxprot.c
@@ -46,6 +46,7 @@ static char sccsid[] = "@(#)authunix_prot.c 1.15 87/08/11 Copyr 1984 Sun Micro";
 
 /*
  * XDR for unix authentication parameters.
+ * Unfortunately, none of these can be declared const.
  */
 bool_t
 xdr_authunix_parms (XDR * xdrs, struct authunix_parms *p)
diff --git a/sunrpc/pmap_rmt.c b/sunrpc/pmap_rmt.c
index c3667d4738..8ae93b8f6d 100644
--- a/sunrpc/pmap_rmt.c
+++ b/sunrpc/pmap_rmt.c
@@ -370,7 +370,7 @@ clnt_broadcast (prog, vers, proc, xargs, argsp, xresults, resultsp, eachresult)
 	  stat = RPC_CANTRECV;
 	  goto done_broad;
 	}
-      if (inlen < sizeof (u_long))
+      if ((size_t) inlen < sizeof (u_long))
 	goto recv_again;
       /*
        * see if reply transaction id matches sent id.
diff --git a/sunrpc/proto.h b/sunrpc/proto.h
index ed010f8fab..6d2747f728 100644
--- a/sunrpc/proto.h
+++ b/sunrpc/proto.h
@@ -1,7 +1,7 @@
 /****** rpc_clntout.c ******/
 
 void write_stubs(void);
-void printarglist(proc_list *proc, 
+void printarglist(proc_list *proc,
 		  const char *addargname, const char *addargtype);
 
 /****** rpc_cout.c ******/
@@ -15,9 +15,9 @@ void emit_single_in_line(declaration *decl, int flag, relation rel);
 void print_datadef(definition *def);
 void print_funcdef(definition *def);
 void pxdrfuncdecl(const char *name, int pointerp);
-void pprocdef(proc_list *proc, version_list *vp, 
+void pprocdef(proc_list *proc, version_list *vp,
 	      const char *addargtype, int server_p, int mode);
-void pdeclaration(const char *name, declaration *dec, int tab, 
+void pdeclaration(const char *name, declaration *dec, int tab,
 		  const char *separator);
 
 /****** rpc_main.c ******/
@@ -36,7 +36,7 @@ void write_sample_clnt_main(void);
    /* see rpc_scan.h */
 
 /****** rpc_svcout.c ******/
-int nullproc(proc_list *proc);
+int nullproc(const proc_list *proc);
 void write_svc_aux(int nomain);
 void write_msg_out(void);
 
diff --git a/sunrpc/rpc/auth_unix.h b/sunrpc/rpc/auth_unix.h
index 32d8d0aa35..d006f51f72 100644
--- a/sunrpc/rpc/auth_unix.h
+++ b/sunrpc/rpc/auth_unix.h
@@ -46,6 +46,10 @@
 
 #define _RPC_AUTH_UNIX_H	1
 #include <features.h>
+#include <sys/types.h>
+#include <rpc/types.h>
+#include <rpc/auth.h>
+#include <rpc/xdr.h>
 
 __BEGIN_DECLS
 
diff --git a/sunrpc/rpc/clnt.h b/sunrpc/rpc/clnt.h
index 2cabc00d64..43a599ad25 100644
--- a/sunrpc/rpc/clnt.h
+++ b/sunrpc/rpc/clnt.h
@@ -38,6 +38,9 @@
 
 #define _RPC_CLNT_H	1
 #include <features.h>
+#include <sys/types.h>
+#include <rpc/types.h>
+#include <rpc/auth.h>
 
 __BEGIN_DECLS
 
@@ -130,13 +133,13 @@ struct CLIENT {
   AUTH	*cl_auth;		 /* authenticator */
   struct clnt_ops {
     enum clnt_stat (*cl_call) __P ((CLIENT *, u_long, xdrproc_t,
-				    caddr_t, xdrproc_t, 
-				    caddr_t, struct timeval));	
+				    caddr_t, xdrproc_t,
+				    caddr_t, struct timeval));
 			       	/* call remote procedure */
     void (*cl_abort) __P ((void));  /* abort a call */
-    void (*cl_geterr) __P ((CLIENT *, struct rpc_err *));	
+    void (*cl_geterr) __P ((CLIENT *, struct rpc_err *));
 				/* get specific error code */
-    bool_t (*cl_freeres) __P ((CLIENT *, xdrproc_t, caddr_t)); 
+    bool_t (*cl_freeres) __P ((CLIENT *, xdrproc_t, caddr_t));
 				/* frees results */
     void (*cl_destroy) __P ((CLIENT *)); /* destroy this structure */
     bool_t (*cl_control) __P ((CLIENT *, int, char *));
@@ -270,7 +273,7 @@ struct CLIENT {
  *	u_long prog;
  *	u_long vers;
  */
-extern CLIENT *clntraw_create __P ((__const u_long __prog, 
+extern CLIENT *clntraw_create __P ((__const u_long __prog,
 				    __const u_long __vers));
 
 
@@ -283,7 +286,7 @@ extern CLIENT *clntraw_create __P ((__const u_long __prog,
  *	u_ong vers;	-- version number
  *	char *prot;	-- protocol
  */
-extern CLIENT *clnt_create __P ((__const char *__host, __const u_long __prog, 
+extern CLIENT *clnt_create __P ((__const char *__host, __const u_long __prog,
 				 __const u_long __vers, __const char *__prot));
 
 
@@ -334,7 +337,7 @@ extern CLIENT *clntudp_bufcreate __P ((struct sockaddr_in *__raddr,
 				       int *__sockp, u_int __sendsz,
 				       u_int __recvsz));
 
-extern int callrpc __P ((__const char *__host, __const u_long __prognum, 
+extern int callrpc __P ((__const char *__host, __const u_long __prognum,
 			 __const u_long __versnum, __const u_long __procnum,
 			 __const xdrproc_t __inproc, __const char *__in,
 			 __const xdrproc_t __outproc, char *__out));
@@ -354,9 +357,9 @@ extern void clnt_perrno __P ((enum clnt_stat __num));	/* stderr */
 /*
  * Print an English error message, given the client error code
  */
-extern void clnt_perror __P ((CLIENT *__clnt, __const char *__msg)); 
+extern void clnt_perror __P ((CLIENT *__clnt, __const char *__msg));
 							/* stderr */
-extern char *clnt_sperror __P ((CLIENT *__clnt, __const char *__msg)); 
+extern char *clnt_sperror __P ((CLIENT *__clnt, __const char *__msg));
 							/* string */
 
 /*
diff --git a/sunrpc/rpc/pmap_clnt.h b/sunrpc/rpc/pmap_clnt.h
index 0b8d50f10f..45639e7dc4 100644
--- a/sunrpc/rpc/pmap_clnt.h
+++ b/sunrpc/rpc/pmap_clnt.h
@@ -38,6 +38,8 @@
 #ifndef _RPC_PMAP_CLNT_H
 #define _RPC_PMAP_CLNT_H	1
 #include <features.h>
+#include <rpc/types.h>
+#include <rpc/xdr.h>
 
 __BEGIN_DECLS
 
@@ -70,23 +72,23 @@ extern bool_t pmap_set __P ((__const u_long __program, __const u_long __vers,
 extern bool_t pmap_unset __P ((__const u_long __program, __const u_long __vers));
 extern struct pmaplist *pmap_getmaps __P ((struct sockaddr_in *__address));
 extern enum clnt_stat pmap_rmtcall __P ((struct sockaddr_in *__addr,
-					 __const u_long __prog, 
+					 __const u_long __prog,
 					 __const u_long __vers,
-					 __const u_long __proc, 
+					 __const u_long __proc,
 					 xdrproc_t __xdrargs,
 					 caddr_t __argsp, xdrproc_t __xdrres,
 					 caddr_t __resp, struct timeval __tout,
 					 u_long *__port_ptr));
-extern enum clnt_stat clnt_broadcast __P ((__const u_long __prog, 
+extern enum clnt_stat clnt_broadcast __P ((__const u_long __prog,
 					   __const u_long __vers,
-					   __const u_long __proc, 
+					   __const u_long __proc,
 					   xdrproc_t __xargs,
 					   caddr_t __argsp,
 					   xdrproc_t __xresults,
 					   caddr_t __resultsp,
 					   resultproc_t __eachresult));
 extern u_short pmap_getport __P ((struct sockaddr_in *__address,
-				  __const u_long __program, 
+				  __const u_long __program,
 				  __const u_long __version,
 				  u_int __protocol));
 
diff --git a/sunrpc/rpc/pmap_rmt.h b/sunrpc/rpc/pmap_rmt.h
index 2e1af7e3d0..6d32045c8e 100644
--- a/sunrpc/rpc/pmap_rmt.h
+++ b/sunrpc/rpc/pmap_rmt.h
@@ -39,7 +39,9 @@
 
 #define _RPC_PMAP_RMT_H	1
 #include <features.h>
-
+#include <sys/types.h>
+#include <rpc/types.h>
+#include <rpc/xdr.h>
 
 __BEGIN_DECLS
 
diff --git a/sunrpc/rpc/rpc_msg.h b/sunrpc/rpc/rpc_msg.h
index 8f6b6a9da4..73996169d6 100644
--- a/sunrpc/rpc/rpc_msg.h
+++ b/sunrpc/rpc/rpc_msg.h
@@ -33,6 +33,7 @@
 #define _RPC_MSG_H 1
 #include <sys/cdefs.h>
 
+#include <rpc/xdr.h>
 #include <rpc/clnt.h>
 
 /*
diff --git a/sunrpc/rpc/xdr.h b/sunrpc/rpc/xdr.h
index eecb1e14be..aa1c702757 100644
--- a/sunrpc/rpc/xdr.h
+++ b/sunrpc/rpc/xdr.h
@@ -39,6 +39,8 @@
 
 #define __XDR_HEADER__
 #include <features.h>
+#include <sys/types.h>
+#include <rpc/types.h>
 
 /* We need FILE.  */
 #include <stdio.h>
@@ -91,8 +93,17 @@ enum xdr_op
  * This is the number of bytes per unit of external data.
  */
 #define BYTES_PER_XDR_UNIT	(4)
+/*
+ * This only works if the above is a power of 2.  But it's defined to be
+ * 4 by the appropriate RFCs.  So it will work.  And it's normally quicker
+ * than the old routine.
+ */
+#if 1
+#define RNDUP(x)  (((x) + BYTES_PER_XDR_UNIT - 1) & ~(BYTES_PER_XDR_UNIT - 1))
+#else /* this is the old routine */
 #define RNDUP(x)  ((((x) + BYTES_PER_XDR_UNIT - 1) / BYTES_PER_XDR_UNIT) \
 		    * BYTES_PER_XDR_UNIT)
+#endif
 
 /*
  * The XDR handle.
@@ -108,7 +119,7 @@ struct XDR
       {
 	bool_t (*x_getlong) __P ((XDR * __xdrs, long *__lp));
 	/* get a long from underlying stream */
-	bool_t (*x_putlong) __P ((XDR * __xdrs, long *__lp));
+	bool_t (*x_putlong) __P ((XDR * __xdrs, __const long *__lp));
 	/* put a long to " */
 	bool_t (*x_getbytes) __P ((XDR * __xdrs, caddr_t __addr, u_int __len));
 	/* get some bytes from " */
@@ -243,6 +254,9 @@ struct xdr_discrim
 
 /*
  * These are the "generic" xdr routines.
+ * None of these can have const applied because it's not possible to
+ * know whether the call is a read or a write to the passed parameter
+ * also, the XDR structure is always updated by some of these calls.
  */
 extern bool_t xdr_void __P ((void));
 extern bool_t xdr_int __P ((XDR * __xdrs, int *__ip));
@@ -294,8 +308,8 @@ extern bool_t xdr_netobj __P ((XDR * __xdrs, struct netobj * __np));
  */
 
 /* XDR using memory buffers */
-extern void xdrmem_create __P ((XDR * __xdrs, caddr_t __addr, u_int __size,
-				enum xdr_op __op));
+extern void xdrmem_create __P ((XDR * __xdrs, __const caddr_t __addr,
+				u_int __size, enum xdr_op __op));
 
 /* XDR using stdio library */
 extern void xdrstdio_create __P ((XDR * __xdrs, FILE * __file,
diff --git a/sunrpc/rpc_cout.c b/sunrpc/rpc_cout.c
index 77319d9b15..ab3b24da74 100644
--- a/sunrpc/rpc_cout.c
+++ b/sunrpc/rpc_cout.c
@@ -45,10 +45,10 @@ char cout_rcsid[] =
 #include "proto.h"
 
 static void emit_enum(definition *def);
-static void emit_program(definition *def);
-static void emit_union(definition *def);
+static void emit_program(const definition *def);
+static void emit_union(const definition *def);
 static void emit_struct(definition *def);
-static void emit_typedef(definition *def);
+static void emit_typedef(const definition *def);
 static int findtype(const definition *def, const char *type);
 static int undefined(const char *type);
 static void print_generic_header(const char *procname, int pointerp);
@@ -59,8 +59,8 @@ static void print_ifclose(int indent);
 static void print_ifstat(int indent, const char *prefix, const char *type,
 			 relation rel, const char *amax,
 			 const char *objname, const char *name);
-static void print_stat(int indent, declaration *dec);
-static void print_header(definition *def);
+static void print_stat(int indent, const declaration *dec);
+static void print_header(const definition *def);
 static void print_trailer(void);
 static char *upcase(const char *str);
 
@@ -77,15 +77,16 @@ emit(definition *def)
 		emit_program(def);
 		return;
 	}
-	if(def->def_kind == DEF_TYPEDEF)
+	if (def->def_kind == DEF_TYPEDEF)
 	  {
 	  /* now we need to handle declarations like
-   struct typedef foo foo;
-   since we don't want this to be expanded into 2 calls to xdr_foo */
+		struct typedef foo foo;
+	     since we don't want this to be expanded
+	     into 2 calls to xdr_foo */
 
- 	if(strcmp(def->def.ty.old_type,def->def_name)==0)
-	  return;
-      };
+	    if (strcmp(def->def.ty.old_type,def->def_name)==0)
+	      return;
+	  };
 
 	print_header(def);
 	switch (def->def_kind) {
@@ -102,7 +103,8 @@ emit(definition *def)
 		emit_typedef(def);
 		break;
 	default:
-	  /* can't happen */
+		/* can't happen */
+		break;
 	}
 	print_trailer();
 }
@@ -110,7 +112,6 @@ emit(definition *def)
 static int
 findtype(const definition *def, const char *type)
 {
-
 	if (def->def_kind == DEF_PROGRAM || def->def_kind == DEF_CONST) {
 		return (0);
 	} else {
@@ -122,10 +123,7 @@ static int
 undefined(const char *type)
 {
 	definition *def;
-
 	def = (definition *) FINDVAL(defined, type, findtype);
-
-
 	return (def == NULL);
 }
 
@@ -153,33 +151,25 @@ print_generic_header(const char *procname, int pointerp)
 }
 
 static void
-print_header(definition *def)
+print_header(const definition *def)
 {
+	print_generic_header(def->def_name,
+			     def->def_kind != DEF_TYPEDEF ||
+			     !isvectordef(def->def.ty.old_type,
+					  def->def.ty.rel));
 
-/*
-  decl_list *dl;
-  bas_type *ptr;
-  int i;
- */
-
-  print_generic_header( def->def_name,
-		       def->def_kind != DEF_TYPEDEF ||
-		       !isvectordef(def->def.ty.old_type, def->def.ty.rel));
-
-  /* Now add Inline support */
-
-
-  if(inlineflag == 0 )
-    return;
-  /*May cause lint to complain. but  ... */
-f_print(fout, "\t register long *buf;\n\n");
+	/* Now add Inline support */
 
+	if(inlineflag == 0 )
+		return;
+	/*May cause lint to complain. but  ... */
+	f_print(fout, "\t register long *buf;\n\n");
 }
 
 static void
-print_prog_header(proc_list *plist)
+print_prog_header(const proc_list *plist)
 {
-  print_generic_header( plist->args.argname, 1 );
+	print_generic_header(plist->args.argname, 1 );
 }
 
 static void
@@ -308,7 +298,7 @@ emit_enum(definition *def)
 }
 
 static void
-emit_program(definition *def)
+emit_program(const definition *def)
 {
 	decl_list *dl;
 	version_list *vlist;
@@ -327,7 +317,7 @@ emit_program(definition *def)
 }
 
 static void
-emit_union(definition *def)
+emit_union(const definition *def)
 {
   declaration *dflt;
   case_list *cl;
@@ -393,6 +383,8 @@ emit_union(definition *def)
   f_print(fout, "\t}\n");
 }
 
+/* this may be const.  i haven't traced this one through yet. */
+
 static void
 emit_struct(definition *def)
 {
@@ -446,9 +438,6 @@ emit_struct(definition *def)
 			return;
 		};
 
-
-
-
 		flag=PUT;
 		for(j=0; j<2; j++){
 
@@ -605,7 +594,7 @@ emit_struct(definition *def)
 
 
 static void
-emit_typedef(definition *def)
+emit_typedef(const definition *def)
 {
 	const char *prefix = def->def.ty.old_prefix;
 	const char *type = def->def.ty.old_type;
@@ -617,7 +606,7 @@ emit_typedef(definition *def)
 }
 
 static void
-print_stat(int indent, declaration *dec)
+print_stat(int indent, const declaration *dec)
 {
 	const char *prefix = dec->prefix;
 	const char *type = dec->type;
diff --git a/sunrpc/rpc_parse.h b/sunrpc/rpc_parse.h
index 07c1f67833..8d48c85a07 100644
--- a/sunrpc/rpc_parse.h
+++ b/sunrpc/rpc_parse.h
@@ -31,7 +31,7 @@
 /*      @(#)rpc_parse.h  1.3  90/08/29  (C) 1987 SMI   */
 
 /*
- * rpc_parse.h, Definitions for the RPCL parser 
+ * rpc_parse.h, Definitions for the RPCL parser
  */
 
 enum defkind {
@@ -50,7 +50,7 @@ enum relation {
 	REL_VECTOR,	/* fixed length array */
 	REL_ARRAY,	/* variable length array */
 	REL_POINTER,	/* pointer */
-	REL_ALIAS,	/* simple */
+	REL_ALIAS	/* simple */
 };
 typedef enum relation relation;
 
@@ -113,7 +113,7 @@ struct arg_list {
 	const char *argname; /* name of struct for arg*/
 	decl_list *decls;
 };
-	
+
 typedef struct arg_list arg_list;
 
 struct proc_list {
diff --git a/sunrpc/rpc_svcout.c b/sunrpc/rpc_svcout.c
index d19b9b45eb..75eb695e87 100644
--- a/sunrpc/rpc_svcout.c
+++ b/sunrpc/rpc_svcout.c
@@ -51,10 +51,10 @@ static const char ROUTINE[] = "local";
 
 char _errbuf[256];		/* For all messages */
 
-static void internal_proctype (proc_list * plist);
+static void internal_proctype (const proc_list * plist);
 static void p_xdrfunc (const char *rname, const char *typename);
-static void write_real_program (definition * def);
-static void write_program (definition * def, const char *storage);
+static void write_real_program (const definition * def);
+static void write_program (const definition * def, const char *storage);
 static void printerr (const char *err, const char *transp);
 static void printif (const char *proc, const char *transp,
 		     const char *prefix, const char *arg);
@@ -78,7 +78,7 @@ p_xdrfunc (const char *rname, const char *typename)
 }
 
 void
-internal_proctype (proc_list * plist)
+internal_proctype (const proc_list * plist)
 {
   f_print (fout, "static ");
   ptype (plist->res_prefix, plist->res_type, 1);
@@ -321,7 +321,7 @@ write_programs (const char *storage)
    Unpacks single user argument of printmsg_1 to call-by-value format
    expected by printmsg_1. */
 static void
-write_real_program (definition * def)
+write_real_program (const definition * def)
 {
   version_list *vp;
   proc_list *proc;
@@ -388,7 +388,7 @@ write_real_program (definition * def)
 }
 
 static void
-write_program (definition * def, const char *storage)
+write_program (const definition * def, const char *storage)
 {
   version_list *vp;
   proc_list *proc;
@@ -566,7 +566,7 @@ printif (const char *proc, const char *transp, const char *prefix,
 }
 
 int
-nullproc (proc_list * proc)
+nullproc (const proc_list * proc)
 {
   for (; proc != NULL; proc = proc->next)
     {
diff --git a/sunrpc/xdr.c b/sunrpc/xdr.c
index d666119376..becc59bed3 100644
--- a/sunrpc/xdr.c
+++ b/sunrpc/xdr.c
@@ -93,10 +93,6 @@ xdr_int (xdrs, ip)
      int *ip;
 {
 
-#ifdef lint
-  (void) (xdr_short (xdrs, (short *) ip));
-  return (xdr_long (xdrs, (long *) ip));
-#else
 #if INT_MAX < LONG_MAX
   long l;
 
@@ -123,7 +119,6 @@ xdr_int (xdrs, ip)
 #else
 #error unexpected integer sizes in_xdr_int()
 #endif
-#endif
 }
 
 /*
@@ -134,10 +129,6 @@ xdr_u_int (xdrs, up)
      XDR *xdrs;
      u_int *up;
 {
-#ifdef lint
-  (void) (xdr_short (xdrs, (short *) up));
-  return (xdr_u_long (xdrs, (u_long *) up));
-#else
 #if UINT_MAX < ULONG_MAX
   u_long l;
 
@@ -164,7 +155,6 @@ xdr_u_int (xdrs, up)
 #else
 #error unexpected integer sizes in_xdr_u_int()
 #endif
-#endif
 }
 
 /*
@@ -349,7 +339,6 @@ xdr_enum (xdrs, ep)
      XDR *xdrs;
      enum_t *ep;
 {
-#ifndef lint
   enum sizecheck
     {
       SIZEVAL
@@ -392,10 +381,6 @@ xdr_enum (xdrs, ep)
     {
       return FALSE;
     }
-#else /* lint */
-  (void) (xdr_short (xdrs, (short *) ep));
-  return xdr_long (xdrs, (long *) ep);
-#endif /* lint */
 }
 
 /*
diff --git a/sunrpc/xdr_float.c b/sunrpc/xdr_float.c
index be5a07d028..2e1e37f0a2 100644
--- a/sunrpc/xdr_float.c
+++ b/sunrpc/xdr_float.c
@@ -87,8 +87,8 @@ static struct sgl_limits {
 
 bool_t
 xdr_float(xdrs, fp)
-	register XDR *xdrs;
-	register float *fp;
+     XDR *xdrs;
+     float *fp;
 {
 #ifdef vax
 	struct ieee_single is;
@@ -207,8 +207,8 @@ static struct dbl_limits {
 
 bool_t
 xdr_double(xdrs, dp)
-	register XDR *xdrs;
-	double *dp;
+     XDR *xdrs;
+     double *dp;
 {
 #ifdef vax
 	struct	ieee_double id;
diff --git a/sunrpc/xdr_mem.c b/sunrpc/xdr_mem.c
index 481a8664b5..8e88e41ea2 100644
--- a/sunrpc/xdr_mem.c
+++ b/sunrpc/xdr_mem.c
@@ -47,13 +47,13 @@ static char sccsid[] = "@(#)xdr_mem.c 1.19 87/08/11 Copyr 1984 Sun Micro";
 #include <rpc/rpc.h>
 
 static bool_t xdrmem_getlong (XDR *, long *);
-static bool_t xdrmem_putlong (XDR *, long *);
+static bool_t xdrmem_putlong (XDR *, const long *);
 static bool_t xdrmem_getbytes (XDR *, caddr_t, u_int);
-static bool_t xdrmem_putbytes (XDR *, caddr_t, u_int);
-static u_int xdrmem_getpos (XDR *);
+static bool_t xdrmem_putbytes (XDR *, const caddr_t, u_int);
+static u_int xdrmem_getpos (const XDR *);
 static bool_t xdrmem_setpos (XDR *, u_int);
 static long *xdrmem_inline (XDR *, int);
-static void xdrmem_destroy (XDR *);
+static void xdrmem_destroy (const XDR *);
 
 static const struct xdr_ops xdrmem_ops =
 {
@@ -74,7 +74,7 @@ static const struct xdr_ops xdrmem_ops =
 void
 xdrmem_create (xdrs, addr, size, op)
      XDR *xdrs;
-     caddr_t addr;
+     const caddr_t addr;
      u_int size;
      enum xdr_op op;
 {
@@ -85,11 +85,21 @@ xdrmem_create (xdrs, addr, size, op)
   xdrs->x_handy = size;
 }
 
+/*
+ * Nothing needs to be done for the memory case.  The argument is clearly
+ * const.
+ */
+
 static void
-xdrmem_destroy (XDR *xdrs)
+xdrmem_destroy (const XDR *xdrs)
 {
 }
 
+/*
+ * Gets the next word from the memory referenced by xdrs and places it
+ * in the long pointed to by lp.  It then increments the private word to
+ * point at the next element.  Neither object pointed to is const
+ */
 static bool_t
 xdrmem_getlong (xdrs, lp)
      XDR *xdrs;
@@ -103,10 +113,15 @@ xdrmem_getlong (xdrs, lp)
   return TRUE;
 }
 
+/*
+ * Puts the long pointed to by lp in the memory referenced by xdrs.  It
+ * then increments the private word to point at the next element.  The
+ * long pointed at is const
+ */
 static bool_t
 xdrmem_putlong (xdrs, lp)
      XDR *xdrs;
-     long *lp;
+     const long *lp;
 {
 
   if ((xdrs->x_handy -= 4) < 0)
@@ -116,6 +131,12 @@ xdrmem_putlong (xdrs, lp)
   return TRUE;
 }
 
+/*
+ * Gets an unaligned number of bytes from the xdrs structure and writes them
+ * to the address passed in addr.  Be very careful when calling this routine
+ * as it could leave the xdrs pointing to an unaligned structure which is not
+ * a good idea.  None of the things pointed to are const.
+ */
 static bool_t
 xdrmem_getbytes (xdrs, addr, len)
      XDR *xdrs;
@@ -130,10 +151,14 @@ xdrmem_getbytes (xdrs, addr, len)
   return TRUE;
 }
 
+/*
+ * The complementary function to the above.  The same warnings apply about
+ * unaligned data.  The source address is const.
+ */
 static bool_t
 xdrmem_putbytes (xdrs, addr, len)
      XDR *xdrs;
-     caddr_t addr;
+     const caddr_t addr;
      u_int len;
 {
 
@@ -144,14 +169,21 @@ xdrmem_putbytes (xdrs, addr, len)
   return TRUE;
 }
 
+/*
+ * Not sure what this one does.  But it clearly doesn't modify the contents
+ * of xdrs.  **FIXME** does this not assume u_int == u_long?
+ */
 static u_int
 xdrmem_getpos (xdrs)
-     XDR *xdrs;
+     const XDR *xdrs;
 {
 
   return (u_long) xdrs->x_private - (u_long) xdrs->x_base;
 }
 
+/*
+ * xdrs modified
+ */
 static bool_t
 xdrmem_setpos (xdrs, pos)
      XDR *xdrs;
@@ -167,6 +199,9 @@ xdrmem_setpos (xdrs, pos)
   return TRUE;
 }
 
+/*
+ * xdrs modified
+ */
 static long *
 xdrmem_inline (xdrs, len)
      XDR *xdrs;
diff --git a/sunrpc/xdr_rec.c b/sunrpc/xdr_rec.c
index af2f9f5ed7..66b33f8456 100644
--- a/sunrpc/xdr_rec.c
+++ b/sunrpc/xdr_rec.c
@@ -54,9 +54,9 @@ static char sccsid[] = "@(#)xdr_rec.c 1.21 87/08/11 Copyr 1984 Sun Micro";
 #include <rpc/rpc.h>
 
 static bool_t xdrrec_getlong (XDR *, long *);
-static bool_t xdrrec_putlong (XDR *, long *);
+static bool_t xdrrec_putlong (XDR *, const long *);
 static bool_t xdrrec_getbytes (XDR *, caddr_t, u_int);
-static bool_t xdrrec_putbytes (XDR *, caddr_t, u_int);
+static bool_t xdrrec_putbytes (XDR *, const caddr_t, u_int);
 static u_int xdrrec_getpos (XDR *);
 static bool_t xdrrec_setpos (XDR *, u_int);
 static long *xdrrec_inline (XDR *, int);
@@ -221,7 +221,7 @@ xdrrec_getlong (xdrs, lp)
 static bool_t
 xdrrec_putlong (xdrs, lp)
      XDR *xdrs;
-     long *lp;
+     const long *lp;
 {
   RECSTREAM *rstrm = (RECSTREAM *) xdrs->x_private;
   int32_t *dest_lp = (int32_t *) rstrm->out_finger;
@@ -276,7 +276,7 @@ xdrrec_getbytes (xdrs, addr, len)
 static bool_t
 xdrrec_putbytes (xdrs, addr, len)
      XDR *xdrs;
-     caddr_t addr;
+     const caddr_t addr;
      u_int len;
 {
   RECSTREAM *rstrm = (RECSTREAM *) xdrs->x_private;
diff --git a/sunrpc/xdr_stdio.c b/sunrpc/xdr_stdio.c
index f95bc70be1..ddd726d8cb 100644
--- a/sunrpc/xdr_stdio.c
+++ b/sunrpc/xdr_stdio.c
@@ -46,9 +46,9 @@ static char sccsid[] = "@(#)xdr_stdio.c 1.16 87/08/11 Copyr 1984 Sun Micro";
 #include <rpc/xdr.h>
 
 static bool_t xdrstdio_getlong (XDR *, long *);
-static bool_t xdrstdio_putlong (XDR *, long *);
+static bool_t xdrstdio_putlong (XDR *, const long *);
 static bool_t xdrstdio_getbytes (XDR *, caddr_t, u_int);
-static bool_t xdrstdio_putbytes (XDR *, caddr_t, u_int);
+static bool_t xdrstdio_putbytes (XDR *, const caddr_t, u_int);
 static u_int xdrstdio_getpos (XDR *);
 static bool_t xdrstdio_setpos (XDR *, u_int);
 static long *xdrstdio_inline (XDR *, int);
@@ -114,7 +114,7 @@ xdrstdio_getlong (xdrs, lp)
 }
 
 static bool_t
-xdrstdio_putlong (XDR *xdrs, long *lp)
+xdrstdio_putlong (XDR *xdrs, const long *lp)
 {
 
   long mycopy = htonl (*lp);
@@ -127,7 +127,7 @@ xdrstdio_putlong (XDR *xdrs, long *lp)
 static bool_t
 xdrstdio_getbytes (xdrs, addr, len)
      XDR *xdrs;
-     caddr_t addr;
+     const caddr_t addr;
      u_int len;
 {
 
@@ -137,7 +137,7 @@ xdrstdio_getbytes (xdrs, addr, len)
 }
 
 static bool_t
-xdrstdio_putbytes (XDR *xdrs, caddr_t addr, u_int len)
+xdrstdio_putbytes (XDR *xdrs, const caddr_t addr, u_int len)
 {
   if ((len != 0) && (fwrite (addr, (int) len, 1, (FILE *) xdrs->x_private) != 1))
     return FALSE;