Remove support for Solaris pre-8
[openafs.git] / src / rx / xdr_rec.c
index 0abbec6..f801d19 100644 (file)
@@ -4,23 +4,23 @@
  * may copy or modify Sun RPC without charge, but are not authorized
  * to license or distribute it to anyone else except as part of a product or
  * program developed by the user.
- * 
+ *
  * SUN RPC IS PROVIDED AS IS WITH NO WARRANTIES OF ANY KIND INCLUDING THE
  * WARRANTIES OF DESIGN, MERCHANTIBILITY AND FITNESS FOR A PARTICULAR
  * PURPOSE, OR ARISING FROM A COURSE OF DEALING, USAGE OR TRADE PRACTICE.
- * 
+ *
  * Sun RPC is provided with no support and without any obligation on the
  * part of Sun Microsystems, Inc. to assist in its use, correction,
  * modification or enhancement.
- * 
+ *
  * SUN MICROSYSTEMS, INC. SHALL HAVE NO LIABILITY WITH RESPECT TO THE
  * INFRINGEMENT OF COPYRIGHTS, TRADE SECRETS OR ANY PATENTS BY SUN RPC
  * OR ANY PART THEREOF.
- * 
+ *
  * In no event will Sun Microsystems, Inc. be liable for any lost revenue
  * or profits or other special, indirect and consequential damages, even if
  * Sun has been advised of the possibility of such damages.
- * 
+ *
  * Sun Microsystems, Inc.
  * 2550 Garcia Avenue
  * Mountain View, California  94043
  * by n bytes of data, where n is contained in the header.  The header
  * is represented as a htonl(afs_uint32).  Thegh order bit encodes
  * whether or not the fragment is the last fragment of the record
- * (1 => fragment is last, 0 => more fragments to follow. 
+ * (1 => fragment is last, 0 => more fragments to follow.
  * The other 31 bits encode the byte length of the fragment.
  */
 
 #include <afsconfig.h>
 #include <afs/param.h>
 
-RCSID
-    ("$Header$");
-
-#include <stdio.h>
-#ifdef HAVE_STDLIB_H
-#include <stdlib.h>
-#endif
+#include <roken.h>
 #include "xdr.h"
-#ifndef AFS_NT40_ENV
-#include <sys/time.h>
-#include <netinet/in.h>
-#endif
-
-#ifdef HAVE_STRING_H
-#include <string.h>
-#else
-#ifdef HAVE_STRINGS_H
-#include <strings.h>
-#endif
-#endif
-
 
 /*  * A record is composed of one or more record fragments.
  * A record fragment is a two-byte header followed by zero to
@@ -108,31 +89,50 @@ typedef struct rec_strm {
 /* Prototypes for static routines */
 static bool_t xdrrec_getint32(XDR * xdrs, afs_int32 * lp);
 static bool_t xdrrec_putint32(XDR * xdrs, afs_int32 * lp);
-static bool_t xdrrec_getbytes(XDR * xdrs, register caddr_t addr,
-                             register u_int len);
-static bool_t xdrrec_putbytes(XDR * xdrs, register caddr_t addr,
-                             register u_int len);
-static u_int xdrrec_getpos(register XDR * xdrs);
-static bool_t xdrrec_setpos(register XDR * xdrs, u_int pos);
-static afs_int32 *xdrrec_inline(register XDR * xdrs, int len);
-static void xdrrec_destroy(register XDR * xdrs);
-static bool_t flush_out(register RECSTREAM * rstrm, bool_t eor);
-static bool_t fill_input_buf(register RECSTREAM * rstrm);
-static bool_t get_input_bytes(register RECSTREAM * rstrm,
-                             register caddr_t addr, register int len);
-static bool_t set_input_fragment(register RECSTREAM * rstrm);
-static bool_t skip_input_bytes(register RECSTREAM * rstrm, int cnt);
-static u_int fix_buf_size(register u_int s);
+static bool_t xdrrec_getbytes(XDR * xdrs, caddr_t addr,
+                             u_int len);
+static bool_t xdrrec_putbytes(XDR * xdrs, caddr_t addr,
+                             u_int len);
+static u_int xdrrec_getpos(XDR * xdrs);
+static bool_t xdrrec_setpos(XDR * xdrs, u_int pos);
+static afs_int32 *xdrrec_inline(XDR * xdrs, u_int len);
+static void xdrrec_destroy(XDR * xdrs);
+static bool_t flush_out(RECSTREAM * rstrm, bool_t eor);
+static bool_t fill_input_buf(RECSTREAM * rstrm);
+static bool_t get_input_bytes(RECSTREAM * rstrm,
+                             caddr_t addr, int len);
+static bool_t set_input_fragment(RECSTREAM * rstrm);
+static bool_t skip_input_bytes(RECSTREAM * rstrm, int cnt);
+static u_int fix_buf_size(u_int s);
 
 static struct xdr_ops xdrrec_ops = {
-    xdrrec_getint32,
-    xdrrec_putint32,
-    xdrrec_getbytes,
-    xdrrec_putbytes,
-    xdrrec_getpos,
-    xdrrec_setpos,
-    xdrrec_inline,
-    xdrrec_destroy
+#ifdef AFS_NT40_ENV
+    /* Windows does not support labeled assignments */
+#if !(defined(KERNEL) && defined(AFS_SUN5_ENV))
+    xdrrec_getint32,    /* deserialize an afs_int32 */
+    xdrrec_putint32,    /* serialize an afs_int32 */
+#endif
+    xdrrec_getbytes,    /* deserialize counted bytes */
+    xdrrec_putbytes,    /* serialize counted bytes */
+    xdrrec_getpos,      /* get offset in the stream: not supported. */
+    xdrrec_setpos,      /* set offset in the stream: not supported. */
+    xdrrec_inline,      /* prime stream for inline macros */
+    xdrrec_destroy,     /* destroy stream */
+#if (defined(KERNEL) && defined(AFS_SUN5_ENV))
+    NULL,
+    xdrrec_getint32,    /* deserialize an afs_int32 */
+    xdrrec_putint32,    /* serialize an afs_int32 */
+#endif
+#else
+    .x_getint32 = xdrrec_getint32,
+    .x_putint32 = xdrrec_putint32,
+    .x_getbytes = xdrrec_getbytes,
+    .x_putbytes = xdrrec_putbytes,
+    .x_getpos = xdrrec_getpos,
+    .x_setpos = xdrrec_setpos,
+    .x_inline = xdrrec_inline,
+    .x_destroy = xdrrec_destroy
+#endif
 };
 
 /*  * Create an xdr handle for xdrrec
@@ -148,16 +148,16 @@ static struct xdr_ops xdrrec_ops = {
        int (*writeit)();  * like write, but pass it a tcp_handle, not sock *
 */
 void
-xdrrec_create(register XDR * xdrs, u_int sendsize, u_int recvsize,
+xdrrec_create(XDR * xdrs, u_int sendsize, u_int recvsize,
              caddr_t tcp_handle, int (*readit) (caddr_t tcp_handle,
                                                 caddr_t out_base, int len),
              int (*writeit) (caddr_t tcp_handle, caddr_t out_base, int len))
 {
-    register RECSTREAM *rstrm = (RECSTREAM *) osi_alloc(sizeof(RECSTREAM));
+    RECSTREAM *rstrm = (RECSTREAM *) osi_alloc(sizeof(RECSTREAM));
 
     if (rstrm == NULL) {
-       /* 
-        *  This is bad.  Should rework xdrrec_create to 
+       /*
+        *  This is bad.  Should rework xdrrec_create to
         *  return a handle, and in this case return NULL
         */
        return;
@@ -195,13 +195,13 @@ xdrrec_create(register XDR * xdrs, u_int sendsize, u_int recvsize,
 static bool_t
 xdrrec_getint32(XDR * xdrs, afs_int32 * lp)
 {
-    register RECSTREAM *rstrm = (RECSTREAM *) (xdrs->x_private);
-    register afs_int32 *buflp = (afs_int32 *) (rstrm->in_finger);
+    RECSTREAM *rstrm = (RECSTREAM *) (xdrs->x_private);
+    afs_int32 *buflp = (afs_int32 *) (rstrm->in_finger);
     afs_int32 myint32;
 
     /* first try the inline, fast case */
     if ((rstrm->fbtbc >= sizeof(afs_int32))
-       && (((int)rstrm->in_boundry - (int)buflp) >= sizeof(afs_int32))) {
+       && (((int)((char *)rstrm->in_boundry - (char *)buflp)) >= sizeof(afs_int32))) {
        *lp = ntohl(*buflp);
        rstrm->fbtbc -= sizeof(afs_int32);
        rstrm->in_finger += sizeof(afs_int32);
@@ -216,8 +216,8 @@ xdrrec_getint32(XDR * xdrs, afs_int32 * lp)
 static bool_t
 xdrrec_putint32(XDR * xdrs, afs_int32 * lp)
 {
-    register RECSTREAM *rstrm = (RECSTREAM *) (xdrs->x_private);
-    register afs_int32 *dest_lp = ((afs_int32 *) (rstrm->out_finger));
+    RECSTREAM *rstrm = (RECSTREAM *) (xdrs->x_private);
+    afs_int32 *dest_lp = ((afs_int32 *) (rstrm->out_finger));
 
     if ((rstrm->out_finger += sizeof(afs_int32)) > rstrm->out_boundry) {
        /*
@@ -236,10 +236,10 @@ xdrrec_putint32(XDR * xdrs, afs_int32 * lp)
 }
 
 static bool_t
-xdrrec_getbytes(XDR * xdrs, register caddr_t addr, register u_int len)
+xdrrec_getbytes(XDR * xdrs, caddr_t addr, u_int len)
 {
-    register RECSTREAM *rstrm = (RECSTREAM *) (xdrs->x_private);
-    register int current;
+    RECSTREAM *rstrm = (RECSTREAM *) (xdrs->x_private);
+    int current;
 
     while (len > 0) {
        current = rstrm->fbtbc;
@@ -261,13 +261,13 @@ xdrrec_getbytes(XDR * xdrs, register caddr_t addr, register u_int len)
 }
 
 static bool_t
-xdrrec_putbytes(XDR * xdrs, register caddr_t addr, register u_int len)
+xdrrec_putbytes(XDR * xdrs, caddr_t addr, u_int len)
 {
-    register RECSTREAM *rstrm = (RECSTREAM *) (xdrs->x_private);
-    register int current;
+    RECSTREAM *rstrm = (RECSTREAM *) (xdrs->x_private);
+    int current;
 
     while (len > 0) {
-       current = (u_int) rstrm->out_boundry - (u_int) rstrm->out_finger;
+       current = (u_int) (rstrm->out_boundry - rstrm->out_finger);
        current = (len < current) ? len : current;
        memcpy(rstrm->out_finger, addr, current);
        rstrm->out_finger += current;
@@ -283,21 +283,21 @@ xdrrec_putbytes(XDR * xdrs, register caddr_t addr, register u_int len)
 }
 
 static u_int
-xdrrec_getpos(register XDR * xdrs)
+xdrrec_getpos(XDR * xdrs)
 {
-    register RECSTREAM *rstrm = (RECSTREAM *) xdrs->x_private;
-    register u_int pos;
+    RECSTREAM *rstrm = (RECSTREAM *) xdrs->x_private;
+    u_int pos;
 
     pos = (u_int) lseek((int)rstrm->tcp_handle, 0, 1);
     if ((int)pos != -1)
        switch (xdrs->x_op) {
 
        case XDR_ENCODE:
-           pos += rstrm->out_finger - rstrm->out_base;
+           pos += (u_int)(rstrm->out_finger - rstrm->out_base);
            break;
 
        case XDR_DECODE:
-           pos -= rstrm->in_boundry - rstrm->in_finger;
+           pos -= (u_int)(rstrm->in_boundry - rstrm->in_finger);
            break;
 
        default:
@@ -308,9 +308,9 @@ xdrrec_getpos(register XDR * xdrs)
 }
 
 static bool_t
-xdrrec_setpos(register XDR * xdrs, u_int pos)
+xdrrec_setpos(XDR * xdrs, u_int pos)
 {
-    register RECSTREAM *rstrm = (RECSTREAM *) xdrs->x_private;
+    RECSTREAM *rstrm = (RECSTREAM *) xdrs->x_private;
     u_int currpos = xdrrec_getpos(xdrs);
     int delta = currpos - pos;
     caddr_t newpos;
@@ -341,9 +341,9 @@ xdrrec_setpos(register XDR * xdrs, u_int pos)
 }
 
 static afs_int32 *
-xdrrec_inline(register XDR * xdrs, int len)
+xdrrec_inline(XDR * xdrs, u_int len)
 {
-    register RECSTREAM *rstrm = (RECSTREAM *) xdrs->x_private;
+    RECSTREAM *rstrm = (RECSTREAM *) xdrs->x_private;
     afs_int32 *buf = NULL;
 
     switch (xdrs->x_op) {
@@ -368,9 +368,9 @@ xdrrec_inline(register XDR * xdrs, int len)
 }
 
 static void
-xdrrec_destroy(register XDR * xdrs)
+xdrrec_destroy(XDR * xdrs)
 {
-    register RECSTREAM *rstrm = (RECSTREAM *) xdrs->x_private;
+    RECSTREAM *rstrm = (RECSTREAM *) xdrs->x_private;
 
     osi_free(rstrm->out_base, rstrm->sendsize);
     osi_free(rstrm->in_base, rstrm->recvsize);
@@ -389,7 +389,7 @@ xdrrec_destroy(register XDR * xdrs)
 bool_t
 xdrrec_skiprecord(XDR * xdrs)
 {
-    register RECSTREAM *rstrm = (RECSTREAM *) (xdrs->x_private);
+    RECSTREAM *rstrm = (RECSTREAM *) (xdrs->x_private);
 
     while (rstrm->fbtbc > 0 || (!rstrm->last_frag)) {
        if (!skip_input_bytes(rstrm, rstrm->fbtbc))
@@ -404,13 +404,13 @@ xdrrec_skiprecord(XDR * xdrs)
 
 /*
  * Look ahead fuction.
- * Returns TRUE iff there is no more input in the buffer 
+ * Returns TRUE iff there is no more input in the buffer
  * after consuming the rest of the current record.
  */
 bool_t
 xdrrec_eof(XDR * xdrs)
 {
-    register RECSTREAM *rstrm = (RECSTREAM *) (xdrs->x_private);
+    RECSTREAM *rstrm = (RECSTREAM *) (xdrs->x_private);
 
     while (rstrm->fbtbc > 0 || (!rstrm->last_frag)) {
        if (!skip_input_bytes(rstrm, rstrm->fbtbc))
@@ -433,17 +433,17 @@ xdrrec_eof(XDR * xdrs)
 bool_t
 xdrrec_endofrecord(XDR * xdrs, bool_t sendnow)
 {
-    register RECSTREAM *rstrm = (RECSTREAM *) (xdrs->x_private);
-    register afs_uint32 len;   /* fragment length */
+    RECSTREAM *rstrm = (RECSTREAM *) (xdrs->x_private);
+    afs_uint32 len;    /* fragment length */
 
     if (sendnow || rstrm->frag_sent
-       || ((afs_uint32) rstrm->out_finger + sizeof(afs_uint32) >=
+       || ((afs_uint32) (rstrm->out_finger + sizeof(afs_uint32)) >=
            (afs_uint32) rstrm->out_boundry)) {
        rstrm->frag_sent = FALSE;
        return (flush_out(rstrm, TRUE));
     }
     len =
-       (afs_uint32) (rstrm->out_finger) - (afs_uint32) (rstrm->frag_header) -
+       (afs_uint32) (rstrm->out_finger - (caddr_t)rstrm->frag_header) -
        sizeof(afs_uint32);
     *(rstrm->frag_header) = htonl(len | LAST_FRAG);
     rstrm->frag_header = (afs_uint32 *) rstrm->out_finger;
@@ -456,11 +456,11 @@ xdrrec_endofrecord(XDR * xdrs, bool_t sendnow)
  * Internal useful routines
  */
 static bool_t
-flush_out(register RECSTREAM * rstrm, bool_t eor)
+flush_out(RECSTREAM * rstrm, bool_t eor)
 {
-    register afs_uint32 eormask = (eor == TRUE) ? LAST_FRAG : 0;
-    register afs_uint32 len =
-       (afs_uint32) (rstrm->out_finger) - (afs_uint32) (rstrm->frag_header) -
+    afs_uint32 eormask = (eor == TRUE) ? LAST_FRAG : 0;
+    afs_uint32 len =
+       (afs_uint32) (rstrm->out_finger - (caddr_t)rstrm->frag_header) -
        sizeof(afs_uint32);
 
     *(rstrm->frag_header) = htonl(len | eormask);
@@ -474,11 +474,11 @@ flush_out(register RECSTREAM * rstrm, bool_t eor)
 }
 
 static bool_t
-fill_input_buf(register RECSTREAM * rstrm)
+fill_input_buf(RECSTREAM * rstrm)
 {
-    register caddr_t where = rstrm->in_base;
-    register int len = rstrm->in_size;
-    u_int adjust = (u_int) rstrm->in_boundry % BYTES_PER_XDR_UNIT;
+    caddr_t where = rstrm->in_base;
+    int len = rstrm->in_size;
+    u_int adjust = (u_int) ((size_t)rstrm->in_boundry % BYTES_PER_XDR_UNIT);
 
     /* Bump the current position out to the next alignment boundary */
     where += adjust;
@@ -493,13 +493,13 @@ fill_input_buf(register RECSTREAM * rstrm)
 }
 
 static bool_t
-get_input_bytes(register RECSTREAM * rstrm, register caddr_t addr,
-               register int len)
+get_input_bytes(RECSTREAM * rstrm, caddr_t addr,
+               int len)
 {
-    register int current;
+    int current;
 
     while (len > 0) {
-       current = (int)rstrm->in_boundry - (int)rstrm->in_finger;
+       current = (int)(rstrm->in_boundry - rstrm->in_finger);
        if (current == 0) {
            if (!fill_input_buf(rstrm))
                return (FALSE);
@@ -516,7 +516,7 @@ get_input_bytes(register RECSTREAM * rstrm, register caddr_t addr,
 
 /* next two bytes of the input stream are treated as a header */
 static bool_t
-set_input_fragment(register RECSTREAM * rstrm)
+set_input_fragment(RECSTREAM * rstrm)
 {
     afs_uint32 header;
 
@@ -530,12 +530,12 @@ set_input_fragment(register RECSTREAM * rstrm)
 
 /* consumes input bytes; knows nothing about records! */
 static bool_t
-skip_input_bytes(register RECSTREAM * rstrm, int cnt)
+skip_input_bytes(RECSTREAM * rstrm, int cnt)
 {
-    register int current;
+    int current;
 
     while (cnt > 0) {
-       current = (int)rstrm->in_boundry - (int)rstrm->in_finger;
+       current = (int)(rstrm->in_boundry - rstrm->in_finger);
        if (current == 0) {
            if (!fill_input_buf(rstrm))
                return (FALSE);
@@ -549,7 +549,7 @@ skip_input_bytes(register RECSTREAM * rstrm, int cnt)
 }
 
 static u_int
-fix_buf_size(register u_int s)
+fix_buf_size(u_int s)
 {
 
     if (s < 100)