aboutsummaryrefslogtreecommitdiff
path: root/sunrpc/xdr.c
diff options
context:
space:
mode:
authorRoland McGrath <roland@gnu.org>1996-07-20 11:26:09 +0000
committerRoland McGrath <roland@gnu.org>1996-07-20 11:26:09 +0000
commit22f87e0fa87762b244202e32500bda7085f5d287 (patch)
tree8a862a0ac6d2a134db30e42579acbfd313ee845b /sunrpc/xdr.c
parentcf725107f396b4fc40f50343519f1cf9ceba6a22 (diff)
downloadglibc-22f87e0fa87762b244202e32500bda7085f5d287.tar
glibc-22f87e0fa87762b244202e32500bda7085f5d287.tar.gz
glibc-22f87e0fa87762b244202e32500bda7085f5d287.tar.bz2
glibc-22f87e0fa87762b244202e32500bda7085f5d287.zip
Sat Jul 20 07:15:33 1996 Roland McGrath <roland@delasyd.gnu.ai.mit.edu>
* crypt/Makefile, crypt/nocrypt.c: Removed. It is illegal to export from the USA any software that even makes it easy to drop in an encryption module of foreign origin. * Makerules (cryptobjdir): Variable removed. ($(libdir)/libc.so): Remove dep on libcrypt.so$(libcrypt.so-version). * Makefile (subdirs): Remove crypt. Fri Jul 19 15:10:37 1996 David Mosberger-Tang <davidm@azstarnet.com> * sunrpc/xdr_mem.c (xdrmem_putlong): Don't cast LP to int32 (the old code would have failed on a big-endian 64-bit architecture). * sunrpc/xdr_stdio.c (xdrstdio_putlong): Ditto. * sunrpc/xdr.c (xdr_int): Handle XDR_FREE case. (xdr_u_long): Use switch instead of chain of if-statements. Remove gratitous parentheses around return expressions. (xdr_enum): Open code case where INT_MAX<LONG_MAX. * sunrpc/svc.c (svc_getreqset): Increment SOCK by 32, not NFDBITS. * sunrpc/portmap.c (reg_service): Declare ANS and PORT as long, not int. Fri Jul 19 16:56:41 1996 Roland McGrath <roland@delasyd.gnu.ai.mit.edu> * dlfcn.h, db.h: New wrapper headers. * posix/glob.h [!_AMIGA && !VMS]: Check this instead of just [!_AMIGA] for `struct stat;' forward decl. Fri Jul 19 22:25:19 1996 Ulrich Drepper <drepper@cygnus.com> * locale/iso-4217.def: Add some more standardized currency symbols.
Diffstat (limited to 'sunrpc/xdr.c')
-rw-r--r--sunrpc/xdr.c196
1 files changed, 108 insertions, 88 deletions
diff --git a/sunrpc/xdr.c b/sunrpc/xdr.c
index 56953e07ef..99a47bf42c 100644
--- a/sunrpc/xdr.c
+++ b/sunrpc/xdr.c
@@ -112,8 +112,10 @@ xdr_int(xdrs, ip)
return FALSE;
}
*ip = (int) l;
+ case XDR_FREE:
return TRUE;
}
+ return FALSE;
# elif INT_MAX == LONG_MAX
return xdr_long(xdrs, (long *)ip);
# elif INT_MAX == SHRT_MAX
@@ -149,8 +151,10 @@ xdr_u_int(xdrs, up)
return FALSE;
}
*up = (u_int) l;
+ case XDR_FREE:
return TRUE;
}
+ return FALSE;
# elif UINT_MAX == ULONG_MAX
return xdr_u_long(xdrs, (u_long *)up);
# elif UINT_MAX == USHRT_MAX
@@ -192,14 +196,17 @@ xdr_u_long(xdrs, ulp)
register XDR *xdrs;
u_long *ulp;
{
+ switch (xdrs->x_op) {
+ case XDR_DECODE:
+ return XDR_GETLONG(xdrs, (long *)ulp);
- if (xdrs->x_op == XDR_DECODE)
- return (XDR_GETLONG(xdrs, (long *)ulp));
- if (xdrs->x_op == XDR_ENCODE)
- return (XDR_PUTLONG(xdrs, (long *)ulp));
- if (xdrs->x_op == XDR_FREE)
- return (TRUE);
- return (FALSE);
+ case XDR_ENCODE:
+ return XDR_PUTLONG(xdrs, (long *)ulp);
+
+ case XDR_FREE:
+ return TRUE;
+ }
+ return FALSE;
}
/*
@@ -213,22 +220,21 @@ xdr_short(xdrs, sp)
long l;
switch (xdrs->x_op) {
-
- case XDR_ENCODE:
+ case XDR_ENCODE:
l = (long) *sp;
- return (XDR_PUTLONG(xdrs, &l));
+ return XDR_PUTLONG(xdrs, &l);
- case XDR_DECODE:
+ case XDR_DECODE:
if (!XDR_GETLONG(xdrs, &l)) {
- return (FALSE);
+ return FALSE;
}
*sp = (short) l;
- return (TRUE);
+ return TRUE;
- case XDR_FREE:
- return (TRUE);
+ case XDR_FREE:
+ return TRUE;
}
- return (FALSE);
+ return FALSE;
}
/*
@@ -242,22 +248,21 @@ xdr_u_short(xdrs, usp)
u_long l;
switch (xdrs->x_op) {
-
- case XDR_ENCODE:
+ case XDR_ENCODE:
l = (u_long) *usp;
- return (XDR_PUTLONG(xdrs, &l));
+ return XDR_PUTLONG(xdrs, &l);
- case XDR_DECODE:
+ case XDR_DECODE:
if (!XDR_GETLONG(xdrs, &l)) {
- return (FALSE);
+ return FALSE;
}
*usp = (u_short) l;
- return (TRUE);
+ return TRUE;
- case XDR_FREE:
- return (TRUE);
+ case XDR_FREE:
+ return TRUE;
}
- return (FALSE);
+ return FALSE;
}
@@ -273,10 +278,10 @@ xdr_char(xdrs, cp)
i = (*cp);
if (!xdr_int(xdrs, &i)) {
- return (FALSE);
+ return FALSE;
}
*cp = i;
- return (TRUE);
+ return TRUE;
}
/*
@@ -285,16 +290,16 @@ xdr_char(xdrs, cp)
bool_t
xdr_u_char(xdrs, cp)
XDR *xdrs;
- char *cp;
+ u_char *cp;
{
u_int u;
u = (*cp);
if (!xdr_u_int(xdrs, &u)) {
- return (FALSE);
+ return FALSE;
}
*cp = u;
- return (TRUE);
+ return TRUE;
}
/*
@@ -308,22 +313,21 @@ xdr_bool(xdrs, bp)
long lb;
switch (xdrs->x_op) {
-
- case XDR_ENCODE:
+ case XDR_ENCODE:
lb = *bp ? XDR_TRUE : XDR_FALSE;
- return (XDR_PUTLONG(xdrs, &lb));
+ return XDR_PUTLONG(xdrs, &lb);
- case XDR_DECODE:
+ case XDR_DECODE:
if (!XDR_GETLONG(xdrs, &lb)) {
- return (FALSE);
+ return FALSE;
}
*bp = (lb == XDR_FALSE) ? FALSE : TRUE;
- return (TRUE);
+ return TRUE;
- case XDR_FREE:
- return (TRUE);
+ case XDR_FREE:
+ return TRUE;
}
- return (FALSE);
+ return FALSE;
}
/*
@@ -341,16 +345,36 @@ xdr_enum(xdrs, ep)
* enums are treated as ints
*/
if (sizeof (enum sizecheck) == 4) {
+# if INT_MAX < LONG_MAX
+ long l;
+
+ switch (xdrs->x_op) {
+ case XDR_ENCODE:
+ l = *ep;
+ return XDR_PUTLONG(xdrs, &l);
+
+ case XDR_DECODE:
+ if (!XDR_GETLONG(xdrs, &l)) {
+ return FALSE;
+ }
+ *ep = l;
+ case XDR_FREE:
+ return TRUE;
+
+ }
+ return FALSE;
+# else
return (xdr_long(xdrs, (long *)ep));
+# endif
} else if (sizeof (enum sizecheck) == sizeof (short)) {
- return (xdr_short(xdrs, (short *)ep));
+ return xdr_short(xdrs, (short *)ep);
} else {
- return (FALSE);
+ return FALSE;
}
-#else
+#else /* lint */
(void) (xdr_short(xdrs, (short *)ep));
return (xdr_long(xdrs, (long *)ep));
-#endif
+#endif /* lint */
}
/*
@@ -371,7 +395,7 @@ xdr_opaque(xdrs, cp, cnt)
* if no data we are done
*/
if (cnt == 0)
- return (TRUE);
+ return TRUE;
/*
* round byte count to full xdr units
@@ -380,29 +404,27 @@ xdr_opaque(xdrs, cp, cnt)
if (rndup > 0)
rndup = BYTES_PER_XDR_UNIT - rndup;
- if (xdrs->x_op == XDR_DECODE) {
+ switch (xdrs->x_op) {
+ case XDR_DECODE:
if (!XDR_GETBYTES(xdrs, cp, cnt)) {
- return (FALSE);
+ return FALSE;
}
if (rndup == 0)
- return (TRUE);
- return (XDR_GETBYTES(xdrs, crud, rndup));
- }
+ return TRUE;
+ return XDR_GETBYTES(xdrs, crud, rndup);
- if (xdrs->x_op == XDR_ENCODE) {
+ case XDR_ENCODE:
if (!XDR_PUTBYTES(xdrs, cp, cnt)) {
- return (FALSE);
+ return FALSE;
}
if (rndup == 0)
- return (TRUE);
- return (XDR_PUTBYTES(xdrs, xdr_zero, rndup));
- }
+ return TRUE;
+ return XDR_PUTBYTES(xdrs, xdr_zero, rndup);
- if (xdrs->x_op == XDR_FREE) {
- return (TRUE);
+ case XDR_FREE:
+ return TRUE;
}
-
- return (FALSE);
+ return FALSE;
}
/*
@@ -424,42 +446,41 @@ xdr_bytes(xdrs, cpp, sizep, maxsize)
* first deal with the length since xdr bytes are counted
*/
if (! xdr_u_int(xdrs, sizep)) {
- return (FALSE);
+ return FALSE;
}
nodesize = *sizep;
if ((nodesize > maxsize) && (xdrs->x_op != XDR_FREE)) {
- return (FALSE);
+ return FALSE;
}
/*
* now deal with the actual bytes
*/
switch (xdrs->x_op) {
-
- case XDR_DECODE:
+ case XDR_DECODE:
if (nodesize == 0) {
- return (TRUE);
+ return TRUE;
}
if (sp == NULL) {
*cpp = sp = (char *)mem_alloc(nodesize);
}
if (sp == NULL) {
(void) fprintf(stderr, "xdr_bytes: out of memory\n");
- return (FALSE);
+ return FALSE;
}
/* fall into ... */
- case XDR_ENCODE:
- return (xdr_opaque(xdrs, sp, nodesize));
+ case XDR_ENCODE:
+ return xdr_opaque(xdrs, sp, nodesize);
- case XDR_FREE:
+ case XDR_FREE:
if (sp != NULL) {
mem_free(sp, nodesize);
*cpp = NULL;
}
- return (TRUE);
+ return TRUE;
}
- return (FALSE);
+ return FALSE;
}
/*
@@ -471,7 +492,7 @@ xdr_netobj(xdrs, np)
struct netobj *np;
{
- return (xdr_bytes(xdrs, &np->n_bytes, &np->n_len, MAX_NETOBJ_SZ));
+ return xdr_bytes(xdrs, &np->n_bytes, &np->n_len, MAX_NETOBJ_SZ);
}
/*
@@ -499,7 +520,7 @@ xdr_union(xdrs, dscmp, unp, choices, dfault)
* we deal with the discriminator; it's an enum
*/
if (! xdr_enum(xdrs, dscmp)) {
- return (FALSE);
+ return FALSE;
}
dscm = *dscmp;
@@ -509,7 +530,7 @@ xdr_union(xdrs, dscmp, unp, choices, dfault)
*/
for (; choices->proc != NULL_xdrproc_t; choices++) {
if (choices->value == dscm)
- return ((*(choices->proc))(xdrs, unp, LASTUNSIGNED));
+ return (*(choices->proc))(xdrs, unp, LASTUNSIGNED);
}
/*
@@ -548,20 +569,20 @@ xdr_string(xdrs, cpp, maxsize)
* first deal with the length since xdr strings are counted-strings
*/
switch (xdrs->x_op) {
- case XDR_FREE:
+ case XDR_FREE:
if (sp == NULL) {
- return(TRUE); /* already free */
+ return TRUE; /* already free */
}
/* fall through... */
- case XDR_ENCODE:
+ case XDR_ENCODE:
size = strlen(sp);
break;
}
if (! xdr_u_int(xdrs, &size)) {
- return (FALSE);
+ return FALSE;
}
if (size > maxsize) {
- return (FALSE);
+ return FALSE;
}
nodesize = size + 1;
@@ -569,29 +590,28 @@ xdr_string(xdrs, cpp, maxsize)
* now deal with the actual bytes
*/
switch (xdrs->x_op) {
-
- case XDR_DECODE:
+ case XDR_DECODE:
if (nodesize == 0) {
- return (TRUE);
+ return TRUE;
}
if (sp == NULL)
*cpp = sp = (char *)mem_alloc(nodesize);
if (sp == NULL) {
(void) fprintf(stderr, "xdr_string: out of memory\n");
- return (FALSE);
+ return FALSE;
}
sp[size] = 0;
/* fall into ... */
- case XDR_ENCODE:
- return (xdr_opaque(xdrs, sp, size));
+ case XDR_ENCODE:
+ return xdr_opaque(xdrs, sp, size);
- case XDR_FREE:
+ case XDR_FREE:
mem_free(sp, nodesize);
*cpp = NULL;
- return (TRUE);
+ return TRUE;
}
- return (FALSE);
+ return FALSE;
}
/*
@@ -604,7 +624,7 @@ xdr_wrapstring(xdrs, cpp)
char **cpp;
{
if (xdr_string(xdrs, cpp, LASTUNSIGNED)) {
- return (TRUE);
+ return TRUE;
}
- return (FALSE);
+ return FALSE;
}