OSDN Git Service

Last portion of libc_hidden_proto removal.
[uclinux-h8/uClibc.git] / libc / inet / rpc / svc_simple.c
index d6bcbd3..d50f014 100644 (file)
  * 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
  */
-#if !defined(lint) && defined(SCCSIDS)
+#if 0
 static char sccsid[] = "@(#)svc_simple.c 1.18 87/08/11 Copyr 1984 Sun Micro";
 #endif
 
-/* 
+/*
  * svc_simple.c
  * Simplified front end to rpc.
  *
  * Copyright (C) 1984, Sun Microsystems, Inc.
  */
 
+#define __FORCE_GLIBC
+#include <features.h>
+
 #include <stdio.h>
-#include <rpc/rpc.h>
+#include <string.h>
+#include <unistd.h>
+#include "rpc_private.h"
+#include <rpc/pmap_clnt.h>
 #include <sys/socket.h>
 #include <netdb.h>
 
-static struct proglst {
-       char *(*p_progname)();
-       int  p_prognum;
-       int  p_procnum;
-       xdrproc_t p_inproc, p_outproc;
-       struct proglst *p_nxt;
-} *proglst;
-static void universal();
+#ifdef USE_IN_LIBIO
+# include <wchar.h>
+# include <libio/iolibio.h>
+# define fputs(s, f) _IO_fputs (s, f)
+#endif
+
+/* Experimentally off - libc_hidden_proto(strdup) */
+/* Experimentally off - libc_hidden_proto(memset) */
+/* libc_hidden_proto(asprintf) */
+/* libc_hidden_proto(fputs) */
+/* libc_hidden_proto(write) */
+/* libc_hidden_proto(exit) */
+/* libc_hidden_proto(svc_sendreply) */
+/* libc_hidden_proto(svc_register) */
+/* libc_hidden_proto(svcerr_decode) */
+/* libc_hidden_proto(svcudp_create) */
+/* libc_hidden_proto(pmap_unset) */
+/* libc_hidden_proto(xdr_void) */
+
+struct proglst_
+  {
+    char *(*p_progname) (char *);
+    int p_prognum;
+    int p_procnum;
+    xdrproc_t p_inproc, p_outproc;
+    struct proglst_ *p_nxt;
+  };
+#ifdef __UCLIBC_HAS_THREADS__
+#define proglst (*(struct proglst_ **)&RPC_THREAD_VARIABLE(svcsimple_proglst_s))
+#else
+static struct proglst_ *proglst;
+#endif
+
+
+static void universal (struct svc_req *rqstp, SVCXPRT *transp_s);
+#ifdef __UCLIBC_HAS_THREADS__
+#define transp (*(SVCXPRT **)&RPC_THREAD_VARIABLE(svcsimple_transp_s))
+#else
 static SVCXPRT *transp;
-struct proglst *pl;
+#endif
 
-registerrpc(prognum, versnum, procnum, progname, inproc, outproc)
-       char *(*progname)();
-       xdrproc_t inproc, outproc;
+int registerrpc (u_long prognum, u_long versnum, u_long procnum,
+            char *(*progname) (char *), xdrproc_t inproc, xdrproc_t outproc);
+int
+registerrpc (u_long prognum, u_long versnum, u_long procnum,
+            char *(*progname) (char *), xdrproc_t inproc, xdrproc_t outproc)
 {
-       
-       if (procnum == NULLPROC) {
-               (void) fprintf(stderr,
-                   "can't reassign procedure number %d\n", NULLPROC);
-               return (-1);
-       }
-       if (transp == 0) {
-               transp = svcudp_create(RPC_ANYSOCK);
-               if (transp == NULL) {
-                       (void) fprintf(stderr, "couldn't create an rpc server\n");
-                       return (-1);
-               }
-       }
-       (void) pmap_unset((u_long)prognum, (u_long)versnum);
-       if (!svc_register(transp, (u_long)prognum, (u_long)versnum, 
-           universal, IPPROTO_UDP)) {
-               (void) fprintf(stderr, "couldn't register prog %d vers %d\n",
-                   prognum, versnum);
-               return (-1);
-       }
-       pl = (struct proglst *)malloc(sizeof(struct proglst));
-       if (pl == NULL) {
-               (void) fprintf(stderr, "registerrpc: out of memory\n");
-               return (-1);
+  struct proglst_ *pl;
+  char *buf;
+
+  if (procnum == NULLPROC)
+    {
+
+      (void) asprintf (&buf, _("can't reassign procedure number %ld\n"),
+                        NULLPROC);
+      goto err_out;
+    }
+  if (transp == 0)
+    {
+      transp = svcudp_create (RPC_ANYSOCK);
+      if (transp == NULL)
+       {
+         buf = strdup (_("couldn't create an rpc server\n"));
+         goto err_out;
        }
-       pl->p_progname = progname;
-       pl->p_prognum = prognum;
-       pl->p_procnum = procnum;
-       pl->p_inproc = inproc;
-       pl->p_outproc = outproc;
-       pl->p_nxt = proglst;
-       proglst = pl;
-       return (0);
+    }
+  (void) pmap_unset ((u_long) prognum, (u_long) versnum);
+  if (!svc_register (transp, (u_long) prognum, (u_long) versnum,
+                    universal, IPPROTO_UDP))
+    {
+      (void) asprintf (&buf, _("couldn't register prog %ld vers %ld\n"),
+                        prognum, versnum);
+      goto err_out;
+    }
+  pl = (struct proglst_ *) malloc (sizeof (struct proglst_));
+  if (pl == NULL)
+    {
+      buf = strdup (_("registerrpc: out of memory\n"));
+      goto err_out;
+    }
+  pl->p_progname = progname;
+  pl->p_prognum = prognum;
+  pl->p_procnum = procnum;
+  pl->p_inproc = inproc;
+  pl->p_outproc = outproc;
+  pl->p_nxt = proglst;
+  proglst = pl;
+  return 0;
+
+ err_out:
+#ifdef USE_IN_LIBIO
+  if (_IO_fwide (stderr, 0) > 0)
+    (void) __fwprintf (stderr, L"%s", buf);
+  else
+#endif
+    (void) fputs (buf, stderr);
+  free (buf);
+  return -1;
 }
 
 static void
-universal(rqstp, transp)
-       struct svc_req *rqstp;
-       SVCXPRT *transp;
+universal (struct svc_req *rqstp, SVCXPRT *transp_l)
 {
-       int prog, proc;
-       char *outdata;
-       char xdrbuf[UDPMSGSIZE];
-       struct proglst *pl;
+  int prog, proc;
+  char *outdata;
+  char xdrbuf[UDPMSGSIZE];
+  struct proglst_ *pl;
+  char *buf = NULL;
 
-       /* 
-        * enforce "procnum 0 is echo" convention
-        */
-       if (rqstp->rq_proc == NULLPROC) {
-               if (svc_sendreply(transp, xdr_void, (char *)NULL) == FALSE) {
-                       (void) fprintf(stderr, "xxx\n");
-                       exit(1);
-               }
-               return;
+  /*
+   * enforce "procnum 0 is echo" convention
+   */
+  if (rqstp->rq_proc == NULLPROC)
+    {
+      if (svc_sendreply (transp_l, (xdrproc_t)xdr_void, (char *) NULL) == FALSE)
+       {
+         write (STDERR_FILENO, "xxx\n", 4);
+         exit (1);
        }
-       prog = rqstp->rq_prog;
-       proc = rqstp->rq_proc;
-       for (pl = proglst; pl != NULL; pl = pl->p_nxt)
-               if (pl->p_prognum == prog && pl->p_procnum == proc) {
-                       /* decode arguments into a CLEAN buffer */
-                       bzero(xdrbuf, sizeof(xdrbuf)); /* required ! */
-                       if (!svc_getargs(transp, pl->p_inproc, xdrbuf)) {
-                               svcerr_decode(transp);
-                               return;
-                       }
-                       outdata = (*(pl->p_progname))(xdrbuf);
-                       if (outdata == NULL && pl->p_outproc != xdr_void)
-                               /* there was an error */
-                               return;
-                       if (!svc_sendreply(transp, pl->p_outproc, outdata)) {
-                               (void) fprintf(stderr,
-                                   "trouble replying to prog %d\n",
-                                   pl->p_prognum);
-                               exit(1);
-                       }
-                       /* free the decoded arguments */
-                       (void)svc_freeargs(transp, pl->p_inproc, xdrbuf);
-                       return;
-               }
-       (void) fprintf(stderr, "never registered prog %d\n", prog);
-       exit(1);
+      return;
+    }
+  prog = rqstp->rq_prog;
+  proc = rqstp->rq_proc;
+  for (pl = proglst; pl != NULL; pl = pl->p_nxt)
+    if (pl->p_prognum == prog && pl->p_procnum == proc)
+      {
+       /* decode arguments into a CLEAN buffer */
+       memset (xdrbuf, 0, sizeof (xdrbuf));    /* required ! */
+       if (!svc_getargs (transp_l, pl->p_inproc, xdrbuf))
+         {
+           svcerr_decode (transp_l);
+           return;
+         }
+       outdata = (*(pl->p_progname)) (xdrbuf);
+       if (outdata == NULL && pl->p_outproc != (xdrproc_t)xdr_void)
+         /* there was an error */
+         return;
+       if (!svc_sendreply (transp_l, pl->p_outproc, outdata))
+         {
+           (void) asprintf (&buf,
+                              _("trouble replying to prog %d\n"),
+                              pl->p_prognum);
+           exit (1);
+         }
+       /* free the decoded arguments */
+       (void) svc_freeargs (transp_l, pl->p_inproc, xdrbuf);
+       return;
+      }
+  (void) asprintf (&buf, _("never registered prog %d\n"), prog);
+#ifdef USE_IN_LIBIO
+  if (_IO_fwide (stderr, 0) > 0)
+    __fwprintf (stderr, L"%s", buf);
+  else
+#endif
+    fputs (buf, stderr);
+  free (buf);
+  exit (1);
 }
-