summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorpeter <peter@FreeBSD.org>1996-12-30 15:21:19 +0000
committerpeter <peter@FreeBSD.org>1996-12-30 15:21:19 +0000
commit03abde609a6b94b24f880ca8f111eab539fdbfb7 (patch)
tree8827360f30a3f15e05b3de211efe39b37af05d43
parentd44c663143c2627d74049687f291ddc569c154fa (diff)
downloadFreeBSD-src-03abde609a6b94b24f880ca8f111eab539fdbfb7.zip
FreeBSD-src-03abde609a6b94b24f880ca8f111eab539fdbfb7.tar.gz
- make wire protocol 64 bit type safe
- extern prototypes now in include file - fix local prototypes - use standard functions Obtained from: a diff of FreeBSD vs. OpenBSD/NetBSD rpc code.
-rw-r--r--lib/libc/rpc/svc_udp.c20
1 files changed, 9 insertions, 11 deletions
diff --git a/lib/libc/rpc/svc_udp.c b/lib/libc/rpc/svc_udp.c
index 16a6140..3c88233 100644
--- a/lib/libc/rpc/svc_udp.c
+++ b/lib/libc/rpc/svc_udp.c
@@ -30,7 +30,7 @@
#if defined(LIBC_SCCS) && !defined(lint)
/*static char *sccsid = "from: @(#)svc_udp.c 1.24 87/08/11 Copyr 1984 Sun Micro";*/
/*static char *sccsid = "from: @(#)svc_udp.c 2.2 88/07/29 4.0 RPCSRC";*/
-static char *rcsid = "$Id: svc_udp.c,v 1.5 1996/06/08 22:54:59 jraynard Exp $";
+static char *rcsid = "$Id: svc_udp.c,v 1.6 1996/08/12 14:00:26 peter Exp $";
#endif
/*
@@ -49,8 +49,6 @@ static char *rcsid = "$Id: svc_udp.c,v 1.5 1996/06/08 22:54:59 jraynard Exp $";
#include <sys/socket.h>
#include <errno.h>
-int bindresvport(int sd, struct sockaddr_in *);
-
#define rpc_buffer(xprt) ((xprt)->xp_p1)
#define MAX(a, b) ((a > b) ? a : b)
@@ -60,6 +58,8 @@ static enum xprt_stat svcudp_stat();
static bool_t svcudp_getargs();
static bool_t svcudp_freeargs();
static void svcudp_destroy();
+static void cache_set __P((SVCXPRT *, u_long));
+static int cache_get __P((SVCXPRT *, struct rpc_msg *, char **, u_long *));
static struct xp_ops svcudp_op = {
svcudp_recv,
@@ -113,7 +113,7 @@ svcudp_bufcreate(sock, sendsz, recvsz)
}
madesock = TRUE;
}
- bzero((char *)&addr, sizeof (addr));
+ memset((char *)&addr, 0, sizeof (addr));
addr.sin_len = sizeof(struct sockaddr_in);
addr.sin_family = AF_INET;
if (bindresvport(sock, &addr)) {
@@ -179,7 +179,6 @@ svcudp_recv(xprt, msg)
register int rlen;
char *reply;
u_long replylen;
- static int cache_get();
again:
xprt->xp_addrlen = sizeof(struct sockaddr_in);
@@ -187,7 +186,7 @@ svcudp_recv(xprt, msg)
0, (struct sockaddr *)&(xprt->xp_raddr), &(xprt->xp_addrlen));
if (rlen == -1 && errno == EINTR)
goto again;
- if (rlen < (int)(4*sizeof(u_long)))
+ if (rlen == -1 || rlen < 4*sizeof(u_int32_t))
return (FALSE);
xdrs->x_op = XDR_DECODE;
XDR_SETPOS(xdrs, 0);
@@ -213,7 +212,6 @@ svcudp_reply(xprt, msg)
register XDR *xdrs = &(su->su_xdrs);
register int slen;
register bool_t stat = FALSE;
- static void cache_set();
xdrs->x_op = XDR_ENCODE;
XDR_SETPOS(xdrs, 0);
@@ -286,7 +284,7 @@ svcudp_destroy(xprt)
(type *) mem_alloc((unsigned) (sizeof(type) * (size)))
#define BZERO(addr, type, size) \
- bzero((char *) addr, sizeof(type) * (int) (size))
+ memset((char *) addr, 0, sizeof(type) * (int) (size))
/*
* An entry in the cache
@@ -443,8 +441,8 @@ cache_set(xprt, replylen)
* Try to get an entry from the cache
* return 1 if found, 0 if not found
*/
-static
-int cache_get(xprt, msg, replyp, replylenp)
+static int
+cache_get(xprt, msg, replyp, replylenp)
SVCXPRT *xprt;
struct rpc_msg *msg;
char **replyp;
@@ -455,7 +453,7 @@ int cache_get(xprt, msg, replyp, replylenp)
register struct svcudp_data *su = su_data(xprt);
register struct udp_cache *uc = (struct udp_cache *) su->su_cache;
-# define EQADDR(a1, a2) (bcmp((char*)&a1, (char*)&a2, sizeof(a1)) == 0)
+# define EQADDR(a1, a2) (memcmp(&a1, &a2, sizeof(a1)) == 0)
loc = CACHE_LOC(xprt, su->su_xid);
for (ent = uc->uc_entries[loc]; ent != NULL; ent = ent->cache_next) {
OpenPOWER on IntegriCloud