Fix prototypes and parameters for compiling with enabled warnings.
[kopensolaris-gnu/glibc.git] / sunrpc / svc_tcp.c
index 278e16f..758b6ba 100644 (file)
@@ -42,66 +42,70 @@ static char sccsid[] = "@(#)svc_tcp.c 1.21 87/08/11 Copyr 1984 Sun Micro";
  */
 
 #include <stdio.h>
+#include <unistd.h>
+#include <string.h>
 #include <rpc/rpc.h>
 #include <sys/socket.h>
 #include <errno.h>
-#define abort ((bool_t (*) ()) abort)
-#ifndef errno
-extern errno;
-#endif
+#include <stdlib.h>
 
 /*
  * Ops vector for TCP/IP based rpc service handle
  */
-static bool_t          svctcp_recv();
-static enum xprt_stat  svctcp_stat();
-static bool_t          svctcp_getargs();
-static bool_t          svctcp_reply();
-static bool_t          svctcp_freeargs();
-static void            svctcp_destroy();
-
-static struct xp_ops svctcp_op = {
-       svctcp_recv,
-       svctcp_stat,
-       svctcp_getargs,
-       svctcp_reply,
-       svctcp_freeargs,
-       svctcp_destroy
+static bool_t svctcp_recv (SVCXPRT *, struct rpc_msg *);
+static enum xprt_stat svctcp_stat (SVCXPRT *);
+static bool_t svctcp_getargs (SVCXPRT *, xdrproc_t, caddr_t);
+static bool_t svctcp_reply (SVCXPRT *, struct rpc_msg *);
+static bool_t svctcp_freeargs (SVCXPRT *, xdrproc_t, caddr_t);
+static void svctcp_destroy (SVCXPRT *);
+
+static const struct xp_ops svctcp_op =
+{
+  svctcp_recv,
+  svctcp_stat,
+  svctcp_getargs,
+  svctcp_reply,
+  svctcp_freeargs,
+  svctcp_destroy
 };
 
 /*
  * Ops vector for TCP/IP rendezvous handler
  */
-static bool_t          rendezvous_request();
-static enum xprt_stat  rendezvous_stat();
-
-static struct xp_ops svctcp_rendezvous_op = {
-       rendezvous_request,
-       rendezvous_stat,
-       abort,
-       abort,
-       abort,
-       svctcp_destroy
+static bool_t rendezvous_request (SVCXPRT *, struct rpc_msg *);
+static enum xprt_stat rendezvous_stat (SVCXPRT *);
+
+static const struct xp_ops svctcp_rendezvous_op =
+{
+  rendezvous_request,
+  rendezvous_stat,
+  (bool_t (*) (SVCXPRT *, xdrproc_t, caddr_t)) abort,
+  (bool_t (*) (SVCXPRT *, struct rpc_msg *)) abort,
+  (bool_t (*) (SVCXPRT *, xdrproc_t, caddr_t)) abort,
+  svctcp_destroy
 };
 
-static int readtcp(), writetcp();
-static SVCXPRT *makefd_xprt();
+static int readtcp (char*, char *, int);
+static int writetcp (char *, char *, int);
+static SVCXPRT *makefd_xprt (int, u_int, u_int);
 
-struct tcp_rendezvous { /* kept in xprt->xp_p1 */
-       u_int sendsize;
-       u_int recvsize;
-};
+struct tcp_rendezvous
+  {                            /* kept in xprt->xp_p1 */
+    u_int sendsize;
+    u_int recvsize;
+  };
 
-struct tcp_conn {  /* kept in xprt->xp_p1 */
-       enum xprt_stat strm_stat;
-       u_long x_id;
-       XDR xdrs;
-       char verf_body[MAX_AUTH_BYTES];
-};
+struct tcp_conn
+  {                            /* kept in xprt->xp_p1 */
+    enum xprt_stat strm_stat;
+    u_long x_id;
+    XDR xdrs;
+    char verf_body[MAX_AUTH_BYTES];
+  };
 
 /*
  * Usage:
- *     xprt = svctcp_create(sock, send_buf_size, recv_buf_size);
+ *      xprt = svctcp_create(sock, send_buf_size, recv_buf_size);
  *
  * Creates, registers, and returns a (rpc) tcp based transporter.
  * Once *xprt is initialized, it is registered as a transporter
@@ -120,57 +124,60 @@ struct tcp_conn {  /* kept in xprt->xp_p1 */
  * 0 => use the system default.
  */
 SVCXPRT *
-svctcp_create(sock, sendsize, recvsize)
-       register int sock;
-       u_int sendsize;
-       u_int recvsize;
+svctcp_create (int sock, u_int sendsize, u_int recvsize)
 {
-       bool_t madesock = FALSE;
-       register SVCXPRT *xprt;
-       register struct tcp_rendezvous *r;
-       struct sockaddr_in addr;
-       int len = sizeof(struct sockaddr_in);
-
-       if (sock == RPC_ANYSOCK) {
-               if ((sock = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP)) < 0) {
-                       perror(_("svctcp_.c - udp socket creation problem"));
-                       return ((SVCXPRT *)NULL);
-               }
-               madesock = TRUE;
-       }
-       bzero((char *)&addr, sizeof (addr));
-       addr.sin_family = AF_INET;
-       if (bindresvport(sock, &addr)) {
-               addr.sin_port = 0;
-               (void)bind(sock, (struct sockaddr *)&addr, len);
-       }
-       if ((getsockname(sock, (struct sockaddr *)&addr, &len) != 0)  ||
-           (listen(sock, 2) != 0)) {
-               perror(_("svctcp_.c - cannot getsockname or listen"));
-               if (madesock)
-                      (void)close(sock);
-               return ((SVCXPRT *)NULL);
-       }
-       r = (struct tcp_rendezvous *)mem_alloc(sizeof(*r));
-       if (r == NULL) {
-               (void) fprintf(stderr, _("svctcp_create: out of memory\n"));
-               return (NULL);
-       }
-       r->sendsize = sendsize;
-       r->recvsize = recvsize;
-       xprt = (SVCXPRT *)mem_alloc(sizeof(SVCXPRT));
-       if (xprt == NULL) {
-               (void) fprintf(stderr, _("svctcp_create: out of memory\n"));
-               return (NULL);
+  bool_t madesock = FALSE;
+  SVCXPRT *xprt;
+  struct tcp_rendezvous *r;
+  struct sockaddr_in addr;
+  int len = sizeof (struct sockaddr_in);
+
+  if (sock == RPC_ANYSOCK)
+    {
+      if ((sock = socket (AF_INET, SOCK_STREAM, IPPROTO_TCP)) < 0)
+       {
+         perror (_("svctcp_.c - udp socket creation problem"));
+         return (SVCXPRT *) NULL;
        }
-       xprt->xp_p2 = NULL;
-       xprt->xp_p1 = (caddr_t)r;
-       xprt->xp_verf = _null_auth;
-       xprt->xp_ops = &svctcp_rendezvous_op;
-       xprt->xp_port = ntohs(addr.sin_port);
-       xprt->xp_sock = sock;
-       xprt_register(xprt);
-       return (xprt);
+      madesock = TRUE;
+    }
+  bzero ((char *) &addr, sizeof (addr));
+  addr.sin_family = AF_INET;
+  if (bindresvport (sock, &addr))
+    {
+      addr.sin_port = 0;
+      (void) bind (sock, (struct sockaddr *) &addr, len);
+    }
+  if ((getsockname (sock, (struct sockaddr *) &addr, &len) != 0) ||
+      (listen (sock, 2) != 0))
+    {
+      perror (_("svctcp_.c - cannot getsockname or listen"));
+      if (madesock)
+       (void) close (sock);
+      return (SVCXPRT *) NULL;
+    }
+  r = (struct tcp_rendezvous *) mem_alloc (sizeof (*r));
+  if (r == NULL)
+    {
+      (void) fputs (_("svctcp_create: out of memory\n"), stderr);
+      return NULL;
+    }
+  r->sendsize = sendsize;
+  r->recvsize = recvsize;
+  xprt = (SVCXPRT *) mem_alloc (sizeof (SVCXPRT));
+  if (xprt == NULL)
+    {
+      (void) fputs (_("svctcp_create: out of memory\n"), stderr);
+      return NULL;
+    }
+  xprt->xp_p2 = NULL;
+  xprt->xp_p1 = (caddr_t) r;
+  xprt->xp_verf = _null_auth;
+  xprt->xp_ops = &svctcp_rendezvous_op;
+  xprt->xp_port = ntohs (addr.sin_port);
+  xprt->xp_sock = sock;
+  xprt_register (xprt);
+  return xprt;
 }
 
 /*
@@ -178,109 +185,106 @@ svctcp_create(sock, sendsize, recvsize)
  * descriptor as its first input.
  */
 SVCXPRT *
-svcfd_create(fd, sendsize, recvsize)
-       int fd;
-       u_int sendsize;
-       u_int recvsize;
+svcfd_create (int fd, u_int sendsize, u_int recvsize)
 {
-
-       return (makefd_xprt(fd, sendsize, recvsize));
+  return makefd_xprt (fd, sendsize, recvsize);
 }
 
 static SVCXPRT *
-makefd_xprt(fd, sendsize, recvsize)
-       int fd;
-       u_int sendsize;
-       u_int recvsize;
+makefd_xprt (int fd, u_int sendsize, u_int recvsize)
 {
-       register SVCXPRT *xprt;
-       register struct tcp_conn *cd;
-
-       xprt = (SVCXPRT *)mem_alloc(sizeof(SVCXPRT));
-       if (xprt == (SVCXPRT *)NULL) {
-               (void) fprintf(stderr, _("svc_tcp: makefd_xprt: out of memory\n"));
-               goto done;
-       }
-       cd = (struct tcp_conn *)mem_alloc(sizeof(struct tcp_conn));
-       if (cd == (struct tcp_conn *)NULL) {
-               (void) fprintf(stderr, _("svc_tcp: makefd_xprt: out of memory\n"));
-               mem_free((char *) xprt, sizeof(SVCXPRT));
-               xprt = (SVCXPRT *)NULL;
-               goto done;
-       }
-       cd->strm_stat = XPRT_IDLE;
-       xdrrec_create(&(cd->xdrs), sendsize, recvsize,
-           (caddr_t)xprt, readtcp, writetcp);
-       xprt->xp_p2 = NULL;
-       xprt->xp_p1 = (caddr_t)cd;
-       xprt->xp_verf.oa_base = cd->verf_body;
-       xprt->xp_addrlen = 0;
-       xprt->xp_ops = &svctcp_op;  /* truly deals with calls */
-       xprt->xp_port = 0;  /* this is a connection, not a rendezvouser */
-       xprt->xp_sock = fd;
-       xprt_register(xprt);
-    done:
-       return (xprt);
+  SVCXPRT *xprt;
+  struct tcp_conn *cd;
+
+  xprt = (SVCXPRT *) mem_alloc (sizeof (SVCXPRT));
+  if (xprt == (SVCXPRT *) NULL)
+    {
+      (void) fputs (_("svc_tcp: makefd_xprt: out of memory\n"), stderr);
+      goto done;
+    }
+  cd = (struct tcp_conn *) mem_alloc (sizeof (struct tcp_conn));
+  if (cd == (struct tcp_conn *) NULL)
+    {
+      (void) fputs (_("svc_tcp: makefd_xprt: out of memory\n"), stderr);
+      mem_free ((char *) xprt, sizeof (SVCXPRT));
+      xprt = (SVCXPRT *) NULL;
+      goto done;
+    }
+  cd->strm_stat = XPRT_IDLE;
+  xdrrec_create (&(cd->xdrs), sendsize, recvsize,
+                (caddr_t) xprt, readtcp, writetcp);
+  xprt->xp_p2 = NULL;
+  xprt->xp_p1 = (caddr_t) cd;
+  xprt->xp_verf.oa_base = cd->verf_body;
+  xprt->xp_addrlen = 0;
+  xprt->xp_ops = &svctcp_op;   /* truly deals with calls */
+  xprt->xp_port = 0;           /* this is a connection, not a rendezvouser */
+  xprt->xp_sock = fd;
+  xprt_register (xprt);
+done:
+  return xprt;
 }
 
 static bool_t
-rendezvous_request(xprt)
-       register SVCXPRT *xprt;
+rendezvous_request (SVCXPRT *xprt, struct rpc_msg *errmsg)
 {
-       int sock;
-       struct tcp_rendezvous *r;
-       struct sockaddr_in addr;
-       int len;
-
-       r = (struct tcp_rendezvous *)xprt->xp_p1;
-    again:
-       len = sizeof(struct sockaddr_in);
-       if ((sock = accept(xprt->xp_sock, (struct sockaddr *)&addr,
-           &len)) < 0) {
-               if (errno == EINTR)
-                       goto again;
-              return (FALSE);
-       }
-       /*
-        * make a new transporter (re-uses xprt)
-        */
-       xprt = makefd_xprt(sock, r->sendsize, r->recvsize);
-       xprt->xp_raddr = addr;
-       xprt->xp_addrlen = len;
-       return (FALSE); /* there is never an rpc msg to be processed */
+  int sock;
+  struct tcp_rendezvous *r;
+  struct sockaddr_in addr;
+  int len;
+
+  r = (struct tcp_rendezvous *) xprt->xp_p1;
+again:
+  len = sizeof (struct sockaddr_in);
+  if ((sock = accept (xprt->xp_sock, (struct sockaddr *) &addr,
+                     &len)) < 0)
+    {
+      if (errno == EINTR)
+       goto again;
+      return FALSE;
+    }
+  /*
+   * make a new transporter (re-uses xprt)
+   */
+  xprt = makefd_xprt (sock, r->sendsize, r->recvsize);
+  xprt->xp_raddr = addr;
+  xprt->xp_addrlen = len;
+  return FALSE;                /* there is never an rpc msg to be processed */
 }
 
 static enum xprt_stat
-rendezvous_stat()
+rendezvous_stat (SVCXPRT *xprt)
 {
-
-       return (XPRT_IDLE);
+  return XPRT_IDLE;
 }
 
 static void
-svctcp_destroy(xprt)
-       register SVCXPRT *xprt;
+svctcp_destroy (SVCXPRT *xprt)
 {
-       register struct tcp_conn *cd = (struct tcp_conn *)xprt->xp_p1;
-
-       xprt_unregister(xprt);
-       (void)close(xprt->xp_sock);
-       if (xprt->xp_port != 0) {
-               /* a rendezvouser socket */
-               xprt->xp_port = 0;
-       } else {
-               /* an actual connection socket */
-               XDR_DESTROY(&(cd->xdrs));
-       }
-       mem_free((caddr_t)cd, sizeof(struct tcp_conn));
-       mem_free((caddr_t)xprt, sizeof(SVCXPRT));
+  struct tcp_conn *cd = (struct tcp_conn *) xprt->xp_p1;
+
+  xprt_unregister (xprt);
+  (void) close (xprt->xp_sock);
+  if (xprt->xp_port != 0)
+    {
+      /* a rendezvouser socket */
+      xprt->xp_port = 0;
+    }
+  else
+    {
+      /* an actual connection socket */
+      XDR_DESTROY (&(cd->xdrs));
+    }
+  mem_free ((caddr_t) cd, sizeof (struct tcp_conn));
+  mem_free ((caddr_t) xprt, sizeof (SVCXPRT));
 }
 
 /*
  * All read operations timeout after 35 seconds.
  * A timeout is fatal for the connection.
  */
-static struct timeval wait_per_try = { 35, 0 };
+static struct timeval wait_per_try =
+{35, 0};
 
 /*
  * reads data from the tcp connection.
@@ -288,43 +292,47 @@ static struct timeval wait_per_try = { 35, 0 };
  * (And a read of zero bytes is a half closed stream => error.)
  */
 static int
-readtcp(xprt, buf, len)
-       register SVCXPRT *xprt;
-       caddr_t buf;
-       register int len;
+readtcp (char *xprtptr, char *buf, int len)
 {
-       register int sock = xprt->xp_sock;
+  SVCXPRT *xprt = (SVCXPRT *)xprtptr;
+  int sock = xprt->xp_sock;
 #ifdef FD_SETSIZE
-       fd_set mask;
-       fd_set readfds;
+  fd_set mask;
+  fd_set readfds;
 
-       FD_ZERO(&mask);
-       FD_SET(sock, &mask);
+  FD_ZERO (&mask);
+  FD_SET (sock, &mask);
 #else
-       register int mask = 1 << sock;
-       int readfds;
+  int mask = 1 << sock;
+  int readfds;
 #endif /* def FD_SETSIZE */
-       do {
-               struct timeval timeout = wait_per_try;
-               readfds = mask;
-               if (select(_rpc_dtablesize(), &readfds, (int*)NULL, (int*)NULL,
-                          &timeout) <= 0) {
-                       if (errno == EINTR) {
-                               continue;
-                       }
-                       goto fatal_err;
-               }
+  do
+    {
+      struct timeval timeout = wait_per_try;
+      readfds = mask;
+      if (select (_rpc_dtablesize (), &readfds, (fd_set *) NULL,
+                 (fd_set *) NULL, &timeout) <= 0)
+       {
+         if (errno == EINTR)
+           {
+             continue;
+           }
+         goto fatal_err;
+       }
 #ifdef FD_SETSIZE
-       } while (!FD_ISSET(sock, &readfds));
+    }
+  while (!FD_ISSET (sock, &readfds));
 #else
-       } while (readfds != mask);
+    }
+  while (readfds != mask);
 #endif /* def FD_SETSIZE */
-       if ((len = read(sock, buf, len)) > 0) {
-               return (len);
-       }
+  if ((len = read (sock, buf, len)) > 0)
+    {
+      return len;
+    }
 fatal_err:
-       ((struct tcp_conn *)(xprt->xp_p1))->strm_stat = XPRT_DIED;
-       return (-1);
+  ((struct tcp_conn *) (xprt->xp_p1))->strm_stat = XPRT_DIED;
+  return -1;
 }
 
 /*
@@ -332,91 +340,91 @@ fatal_err:
  * Any error is fatal and the connection is closed.
  */
 static int
-writetcp(xprt, buf, len)
-       register SVCXPRT *xprt;
-       caddr_t buf;
-       int len;
+writetcp (char *xprtptr, char * buf, int len)
 {
-       register int i, cnt;
-
-       for (cnt = len; cnt > 0; cnt -= i, buf += i) {
-               if ((i = write(xprt->xp_sock, buf, cnt)) < 0) {
-                       ((struct tcp_conn *)(xprt->xp_p1))->strm_stat =
-                           XPRT_DIED;
-                       return (-1);
-               }
+  SVCXPRT *xprt = (SVCXPRT *)xprtptr;
+  int i, cnt;
+
+  for (cnt = len; cnt > 0; cnt -= i, buf += i)
+    {
+      if ((i = write (xprt->xp_sock, buf, cnt)) < 0)
+       {
+         ((struct tcp_conn *) (xprt->xp_p1))->strm_stat =
+           XPRT_DIED;
+         return (-1);
        }
-       return (len);
+    }
+  return (len);
 }
 
 static enum xprt_stat
-svctcp_stat(xprt)
-       SVCXPRT *xprt;
+svctcp_stat (SVCXPRT *xprt)
 {
-       register struct tcp_conn *cd =
-           (struct tcp_conn *)(xprt->xp_p1);
-
-       if (cd->strm_stat == XPRT_DIED)
-               return (XPRT_DIED);
-       if (! xdrrec_eof(&(cd->xdrs)))
-               return (XPRT_MOREREQS);
-       return (XPRT_IDLE);
+  struct tcp_conn *cd =
+  (struct tcp_conn *) (xprt->xp_p1);
+
+  if (cd->strm_stat == XPRT_DIED)
+    return (XPRT_DIED);
+  if (!xdrrec_eof (&(cd->xdrs)))
+    return (XPRT_MOREREQS);
+  return (XPRT_IDLE);
 }
 
 static bool_t
-svctcp_recv(xprt, msg)
-       SVCXPRT *xprt;
-       register struct rpc_msg *msg;
+svctcp_recv (xprt, msg)
+     SVCXPRT *xprt;
+     struct rpc_msg *msg;
 {
-       register struct tcp_conn *cd =
-           (struct tcp_conn *)(xprt->xp_p1);
-       register XDR *xdrs = &(cd->xdrs);
-
-       xdrs->x_op = XDR_DECODE;
-       (void)xdrrec_skiprecord(xdrs);
-       if (xdr_callmsg(xdrs, msg)) {
-               cd->x_id = msg->rm_xid;
-               return (TRUE);
-       }
-       return (FALSE);
+  struct tcp_conn *cd =
+  (struct tcp_conn *) (xprt->xp_p1);
+  XDR *xdrs = &(cd->xdrs);
+
+  xdrs->x_op = XDR_DECODE;
+  (void) xdrrec_skiprecord (xdrs);
+  if (xdr_callmsg (xdrs, msg))
+    {
+      cd->x_id = msg->rm_xid;
+      return (TRUE);
+    }
+  return (FALSE);
 }
 
 static bool_t
-svctcp_getargs(xprt, xdr_args, args_ptr)
-       SVCXPRT *xprt;
-       xdrproc_t xdr_args;
-       caddr_t args_ptr;
+svctcp_getargs (xprt, xdr_args, args_ptr)
+     SVCXPRT *xprt;
+     xdrproc_t xdr_args;
+     caddr_t args_ptr;
 {
 
-       return ((*xdr_args)(&(((struct tcp_conn *)(xprt->xp_p1))->xdrs), args_ptr));
+  return ((*xdr_args) (&(((struct tcp_conn *) (xprt->xp_p1))->xdrs), args_ptr));
 }
 
 static bool_t
-svctcp_freeargs(xprt, xdr_args, args_ptr)
-       SVCXPRT *xprt;
-       xdrproc_t xdr_args;
-       caddr_t args_ptr;
+svctcp_freeargs (xprt, xdr_args, args_ptr)
+     SVCXPRT *xprt;
+     xdrproc_t xdr_args;
+     caddr_t args_ptr;
 {
-       register XDR *xdrs =
-           &(((struct tcp_conn *)(xprt->xp_p1))->xdrs);
+  XDR *xdrs =
+  &(((struct tcp_conn *) (xprt->xp_p1))->xdrs);
 
-       xdrs->x_op = XDR_FREE;
-       return ((*xdr_args)(xdrs, args_ptr));
+  xdrs->x_op = XDR_FREE;
+  return ((*xdr_args) (xdrs, args_ptr));
 }
 
 static bool_t
-svctcp_reply(xprt, msg)
-       SVCXPRT *xprt;
-       register struct rpc_msg *msg;
+svctcp_reply (xprt, msg)
+     SVCXPRT *xprt;
+     struct rpc_msg *msg;
 {
-       register struct tcp_conn *cd =
-           (struct tcp_conn *)(xprt->xp_p1);
-       register XDR *xdrs = &(cd->xdrs);
-       register bool_t stat;
-
-       xdrs->x_op = XDR_ENCODE;
-       msg->rm_xid = cd->x_id;
-       stat = xdr_replymsg(xdrs, msg);
-       (void)xdrrec_endofrecord(xdrs, TRUE);
-       return (stat);
+  struct tcp_conn *cd =
+  (struct tcp_conn *) (xprt->xp_p1);
+  XDR *xdrs = &(cd->xdrs);
+  bool_t stat;
+
+  xdrs->x_op = XDR_ENCODE;
+  msg->rm_xid = cd->x_id;
+  stat = xdr_replymsg (xdrs, msg);
+  (void) xdrrec_endofrecord (xdrs, TRUE);
+  return (stat);
 }