Bring in a transport-independent RPC (TI-RPC).
[dragonfly.git] / usr.bin / rpcgen / rpc_hout.c
index e48e6de..94d74e3 100644 (file)
@@ -5,33 +5,32 @@
  * 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
  *
- * @(#)rpc_hout.c 1.12 89/02/22 (C) 1987 SMI
+ * @(#)rpc_hout.c      1.16    94/04/25 SMI; 1.12 89/02/22 (C) 1987 SMI
+ * $FreeBSD: src/usr.bin/rpcgen/rpc_hout.c,v 1.15 2005/11/13 21:17:24 dwmalone Exp $
  * $DragonFly: src/usr.bin/rpcgen/rpc_hout.c,v 1.5 2004/06/19 16:40:36 joerg Exp $
  */
 
-#ident "@(#)rpc_hout.c 1.16    94/04/25 SMI"
-
 /*
  * rpc_hout.c, Header file outputter for the RPC protocol compiler
  * Copyright (C) 1987, Sun Microsystems, Inc.
 #include <stdio.h>
 #include <ctype.h>
 #include "rpc_parse.h"
+#include "rpc_scan.h"
 #include "rpc_util.h"
 
-void           storexdrfuncdecl(char *, int);
+void           storexdrfuncdecl(const char *, int);
 static void    pconstdef(definition *);
 static void    pstructdef(definition *);
 static void    puniondef(definition *);
-static void    pprogramdef(definition *);
-static void    pstructdef(definition *);
+static void    pprogramdef(definition *, int);
 static void    penumdef(definition *);
 static void    ptypedef(definition *);
-static void    pdefine(char *, char *);
-static int     undefined2(char *, char *);
-static void    parglist(proc_list *, char *);
-static void    pprocdef(proc_list *, version_list *, char *, int, int);
-void           pdeclaration(char *, declaration *, int, char *);
-
-static char RESULT[] = "clnt_res";
+static void    pdefine(const char *, const char *);
+static int     undefined2(const char *, const char *);
+static void    parglist(proc_list *, const char *);
+static void    pprocdef(proc_list *, version_list *, const char *, int);
 
 /*
  * Print the C-version of an xdr definition
  */
 void
-print_datadef(definition *def)
+print_datadef(definition *def, int headeronly)
 {
+
        if (def->def_kind == DEF_PROGRAM)  /* handle data only */
                return;
 
@@ -83,7 +80,7 @@ print_datadef(definition *def)
                ptypedef(def);
                break;
        case DEF_PROGRAM:
-               pprogramdef(def);
+               pprogramdef(def, headeronly);
                break;
        case DEF_CONST:
                pconstdef(def);
@@ -100,12 +97,12 @@ print_datadef(definition *def)
 
 
 void
-print_funcdef(definition *def)
+print_funcdef(definition *def, int headeronly)
 {
        switch (def->def_kind) {
        case DEF_PROGRAM:
                f_print(fout, "\n");
-               pprogramdef(def);
+               pprogramdef(def, headeronly);
                break;
        default:
                break;
@@ -116,11 +113,11 @@ print_funcdef(definition *def)
     out at the end of the file */
 
 void
-storexdrfuncdecl(char *name, int pointerp)
+storexdrfuncdecl(const char *name, int pointerp)
 {
        xdrfunc * xdrptr;
 
-       xdrptr = malloc(sizeof(struct xdrfunc));
+       xdrptr = XALLOC(struct xdrfunc);
 
        xdrptr->name = name;
        xdrptr->pointerp = pointerp;
@@ -135,13 +132,10 @@ storexdrfuncdecl(char *name, int pointerp)
 }
 
 void
-print_xdr_func_def(char *name, int pointerp, int i)
+print_xdr_func_def(const char *name, int pointerp)
 {
-       if (i == 2)
-               f_print(fout, "extern bool_t xdr_%s();\n", name);
-       else  
-               f_print(fout, "extern  bool_t xdr_%s(XDR *, %s%s);\n", name,
-                       name, pointerp ? "*" : "");
+       f_print(fout, "extern  bool_t xdr_%s(XDR *, %s%s);\n", name,
+               name, pointerp ? "*" : "");
 }
 
 
@@ -184,7 +178,7 @@ static void
 pstructdef(definition *def)
 {
        decl_list *l;
-       char *name = def->def_name;
+       const char *name = def->def_name;
 
        f_print(fout, "struct %s {\n", name);
        for (l = def->def.st.decls; l != NULL; l = l->next)
@@ -198,7 +192,7 @@ static void
 puniondef(definition *def)
 {
        case_list *l;
-       char *name = def->def_name;
+       const char *name = def->def_name;
        declaration *decl;
 
        f_print(fout, "struct %s {\n", name);
@@ -223,13 +217,13 @@ puniondef(definition *def)
 }
 
 static void
-pdefine(char *name, char *num)
+pdefine(const char *name, const char *num)
 {
        f_print(fout, "#define\t%s %s\n", name, num);
 }
 
 static void
-puldefine(char *name, char *num)
+puldefine(const char *name, const char *num)
 {
        f_print(fout, "#define\t%s ((unsigned long)(%s))\n", name, num);
 }
@@ -253,23 +247,28 @@ define_printed(proc_list *stop, version_list *start)
 }
 
 static void
-pfreeprocdef(char * name, char *vers, int mode)
+pfreeprocdef(const char * name, const char *vers)
 {
        f_print(fout, "extern int ");
        pvname(name, vers);
-       if (mode == 1)
-               f_print(fout,"_freeresult(SVCXPRT *, xdrproc_t, caddr_t);\n");
-       else
-               f_print(fout,"_freeresult();\n");
+       f_print(fout, "_freeresult(SVCXPRT *, xdrproc_t, caddr_t);\n");
+}
+
+static void
+pdispatch(const char * name, const char *vers)
+{
+
+       f_print(fout, "void ");
+       pvname(name, vers);
+       f_print(fout, "(struct svc_req *rqstp, SVCXPRT *transp);\n");
 }
 
 static void
-pprogramdef(definition *def)
+pprogramdef(definition *def, int headeronly)
 {
        version_list *vers;
        proc_list *proc;
-       int i;
-       char *ext;
+       const char *ext;
 
        pargdef(def);
 
@@ -284,61 +283,27 @@ pprogramdef(definition *def)
                }
                puldefine(vers->vers_name, vers->vers_num);
 
-               /*
-                * Print out 2 definitions, one for ANSI-C, another for 
-                * old K & R C
-                */
-
-               if(!Cflag){
-                       ext = "extern  ";
-                       for (proc = vers->procs; proc != NULL;
-                            proc = proc->next) {
-                               if (!define_printed(proc,
-                                                   def->def.pr.versions)) {
-                                       puldefine(proc->proc_name,
-                                                 proc->proc_num);
-                               }
-                               f_print(fout, "%s", ext);
-                               pprocdef(proc, vers, NULL, 0, 2);
-                               
-                               if (mtflag) {
-                                       f_print(fout, "%s", ext);
-                                       pprocdef(proc, vers, NULL, 1, 2);
-                               }
-                       }
-                       pfreeprocdef(def->def_name, vers->vers_num, 2);
-               } else {
-                       for (i = 1; i < 3; i++) {
-                               if (i == 1) {
-                                       f_print(fout, "\n#if defined(__STDC__) || defined(__cplusplus)\n");
-                                       ext = "extern  ";
-                               } else {
-                                       f_print(fout, "\n#else /* K&R C */\n");
-                                       ext = "extern  ";
-                               }
-
-                               for (proc = vers->procs; proc != NULL;
-                                    proc = proc->next) {
-                                       if (!define_printed(proc,
-                                                           def->def.pr.versions)) {
-                                               puldefine(proc->proc_name,
-                                                         proc->proc_num);
-                                       }
-                                       f_print(fout, "%s", ext);
-                                       pprocdef(proc, vers, "CLIENT *", 0, i);
-                                       f_print(fout, "%s", ext);
-                                       pprocdef(proc, vers, "struct svc_req *", 1, i);
-                               }
-                           pfreeprocdef(def->def_name, vers->vers_num, i);
+               f_print(fout, "\n");
+               ext = "extern  ";
+               if (headeronly) {
+                       f_print(fout, "%s", ext);
+                       pdispatch(def->def_name, vers->vers_num);
+               }
+               for (proc = vers->procs; proc != NULL; proc = proc->next) {
+                       if (!define_printed(proc, def->def.pr.versions)) {
+                               puldefine(proc->proc_name, proc->proc_num);
                        }
-                       f_print(fout, "#endif /* K&R C */\n");
+                       f_print(fout, "%s", ext);
+                       pprocdef(proc, vers, "CLIENT *", 0);
+                       f_print(fout, "%s", ext);
+                       pprocdef(proc, vers, "struct svc_req *", 1);
                }
+               pfreeprocdef(def->def_name, vers->vers_num);
        }
 }
 
 static void
-pprocdef(proc_list *proc, version_list *vp, char* addargtype, int server_p,
-       int mode)
+pprocdef(proc_list *proc, version_list *vp, const char *addargtype, int server_p)
 {
        if (mtflag) {
                /* Print MT style stubs */
@@ -355,20 +320,14 @@ pprocdef(proc_list *proc, version_list *vp, char* addargtype, int server_p,
        else
                pvname(proc->proc_name, vp->vers_num);
 
-       /*
-        *  mode  1 = ANSI-C, mode 2 = K&R C
-        */
-       if ( mode == 1)
-               parglist(proc, addargtype);
-       else
-               f_print(fout, "();\n");
+       parglist(proc, addargtype);
 }
 
 
 
 /* print out argument list of procedure */
 static void
-parglist(proc_list *proc, char* addargtype)
+parglist(proc_list *proc, const char *addargtype)
 {
        decl_list *dl;
 
@@ -398,9 +357,9 @@ parglist(proc_list *proc, char* addargtype)
 static void
 penumdef(definition *def)
 {
-       char *name = def->def_name;
+       const char *name = def->def_name;
        enumval_list *l;
-       char *last = NULL;
+       const char *last = NULL;
        int count = 0;
 
        f_print(fout, "enum %s {\n", name);
@@ -428,8 +387,8 @@ penumdef(definition *def)
 static void
 ptypedef(definition *def)
 {
-       char *name = def->def_name;
-       char *old = def->def.ty.old_type;
+       const char *name = def->def_name;
+       const char *old = def->def.ty.old_type;
        char prefix[8]; /* enough to contain "struct ", including NUL */
        relation rel = def->def.ty.rel;
 
@@ -470,11 +429,11 @@ ptypedef(definition *def)
 }
 
 void
-pdeclaration(char *name, declaration *dec, int tab, char *separator)
+pdeclaration(const char *name, declaration *dec, int tab, const char *separator)
 {
        char buf[8];    /* enough to hold "struct ", include NUL */
-       char *prefix;
-       char *type;
+       const char *prefix;
+       const char *type;
 
        if (streq(dec->type, "void"))
                return;
@@ -525,7 +484,7 @@ pdeclaration(char *name, declaration *dec, int tab, char *separator)
 }
 
 static int
-undefined2(char *type, char *stop)
+undefined2(const char *type, const char *stop)
 {
        list *l;
        definition *def;