Remove sunrpc compatibility
[openafs.git] / src / rxgen / rpc_parse.c
index 3eff6a3..2a47fac 100644 (file)
@@ -82,7 +82,6 @@ int function_list_index;
 /* static prototypes */
 static void isdefined(definition * defp);
 static void def_struct(definition * defp);
-static void def_program(definition * defp);
 static void def_enum(definition * defp);
 static void def_const(definition * defp);
 static void def_union(definition * defp);
@@ -143,9 +142,12 @@ static void er_ProcDeclExterns_setup(void);
 static void er_ProcProcsArray_setup(void);
 static void er_ProcMainBody_setup(void);
 static void er_HeadofOldStyleProc_setup(void);
+static void er_HeadofOldStyleProc_setup2(void);
 static void er_BodyofOldStyleProc_setup(void);
+static void er_BodyofOldStyleProc_setup2(void);
 static void proc_er_case(definition * defp);
 static void er_TailofOldStyleProc_setup(void);
+static void er_TailofOldStyleProc_setup2(void);
 
 
 
@@ -174,14 +176,12 @@ get_definition(void)
     case TOK_ENUM:
        def_enum(defp);
        break;
-    case TOK_PROGRAM:
-       def_program(defp);
-       break;
     case TOK_CONST:
        def_const(defp);
        break;
     case TOK_EOF:
-       return (NULL);
+       free(defp);
+       return NULL;
     case TOK_PACKAGE:
        def_package(defp);
        break;
@@ -278,64 +278,6 @@ def_struct(definition * defp)
 }
 
 static void
-def_program(definition * defp)
-{
-    token tok;
-    version_list *vlist;
-    version_list **vtailp;
-    proc_list *plist;
-    proc_list **ptailp;
-
-    defp->def_kind = DEF_PROGRAM;
-    scan(TOK_IDENT, &tok);
-    defp->def_name = tok.str;
-    scan(TOK_LBRACE, &tok);
-    vtailp = &defp->def.pr.versions;
-    scan(TOK_VERSION, &tok);
-    do {
-       scan(TOK_IDENT, &tok);
-       vlist = ALLOC(version_list);
-       vlist->vers_name = tok.str;
-       scan(TOK_LBRACE, &tok);
-       ptailp = &vlist->procs;
-       do {
-           plist = ALLOC(proc_list);
-           get_type(&plist->res_prefix, &plist->res_type, DEF_PROGRAM);
-           if (streq(plist->res_type, "opaque")) {
-               error("illegal result type");
-           }
-           scan(TOK_IDENT, &tok);
-           plist->proc_name = tok.str;
-           scan(TOK_LPAREN, &tok);
-           get_type(&plist->arg_prefix, &plist->arg_type, DEF_PROGRAM);
-           if (streq(plist->arg_type, "opaque")) {
-               error("illegal argument type");
-           }
-           scan(TOK_RPAREN, &tok);
-           scan(TOK_EQUAL, &tok);
-           scan_num(&tok);
-           scan(TOK_SEMICOLON, &tok);
-           plist->proc_num = tok.str;
-           *ptailp = plist;
-           ptailp = &plist->next;
-           peek(&tok);
-       } while (tok.kind != TOK_RBRACE);
-       *vtailp = vlist;
-       vtailp = &vlist->next;
-       scan(TOK_RBRACE, &tok);
-       scan(TOK_EQUAL, &tok);
-       scan_num(&tok);
-       vlist->vers_num = tok.str;
-       scan(TOK_SEMICOLON, &tok);
-       scan2(TOK_VERSION, TOK_RBRACE, &tok);
-    } while (tok.kind == TOK_VERSION);
-    scan(TOK_EQUAL, &tok);
-    scan_num(&tok);
-    defp->def.pr.prog_num = tok.str;
-    *vtailp = NULL;
-}
-
-static void
 def_enum(definition * defp)
 {
     token tok;
@@ -427,6 +369,8 @@ def_typedef(definition * defp)
 {
     declaration dec;
 
+    memset(&dec, 0, sizeof(dec));
+
     defp->def_kind = DEF_TYPEDEF;
     get_declaration(&dec, DEF_TYPEDEF);
     defp->def_name = dec.name;
@@ -467,7 +411,7 @@ get_declaration(declaration * dec, defkind dkind)
        }
        dec->rel = REL_ARRAY;
        if (peekscan(TOK_RANGLE, &tok)) {
-           dec->array_max = "~0";      /* unspecified size, use max */
+           dec->array_max = "~0u";     /* unspecified size, use max */
        } else {
            scan_num(&tok);
            dec->array_max = tok.str;
@@ -516,8 +460,8 @@ get_type(char **prefixp, char **typep, defkind dkind)
        (void)peekscan(TOK_INT, &tok);
        break;
     case TOK_VOID:
-       if (dkind != DEF_UNION && dkind != DEF_PROGRAM) {
-           error("voids allowed only inside union and program definitions");
+       if (dkind != DEF_UNION) {
+           error("voids allowed only inside union definitions");
        }
        *typep = tok.str;
        break;
@@ -578,8 +522,11 @@ def_package(definition * defp)
     scan(TOK_IDENT, &tok);
     defp->def_name = tok.str;
     no_of_stat_funcs = 0;
-    if (PackageIndex++ >= MAX_PACKAGES)
+
+    PackageIndex++;
+    if (PackageIndex >= MAX_PACKAGES)
        error("Exceeded upper limit of package statements\n");
+
     function_list_index = 0;
     PackagePrefix[PackageIndex] = tok.str;
     if (MasterPrefix == NULL)
@@ -842,6 +789,7 @@ check_proc(definition * defp, token * tokp, int noname)
            prefix, PackagePrefix[PackageIndex], defp->pc.proc_name);
 
     function_list_index++;
+    defp->statindex = no_of_stat_funcs;
     no_of_stat_funcs_header[PackageIndex]++;
     no_of_stat_funcs++;
     *Proc_listp = NULL;
@@ -1407,7 +1355,8 @@ ss_ProcParams_setup(definition * defp)
                }
                f_print(fout, "\t%s %s", plist->pl.param_type,
                        plist->pl.param_name);
-               *pntr = pres;
+               if (pntr)
+                   *pntr = pres;
            } else if (strchr(plist->pl.param_type, '*') == 0) {
                f_print(fout, "\t%s %s", plist->pl.param_type,
                        plist->pl.param_name);
@@ -1972,6 +1921,9 @@ er_Proc_CodeGeneration(void)
            er_HeadofOldStyleProc_setup();
            er_BodyofOldStyleProc_setup();
            er_TailofOldStyleProc_setup();
+           er_HeadofOldStyleProc_setup2();
+           er_BodyofOldStyleProc_setup2();
+           er_TailofOldStyleProc_setup2();
        } else {
            er_ProcDeclExterns_setup();
            er_ProcProcsArray_setup();
@@ -2023,7 +1975,6 @@ er_ProcProcsArray_setup(void)
                        "\nstatic afs_int32 (*StubProcsArray%d[])(struct rx_call *z_call, XDR *z_xdrs) = {_%s%s%s",
                        PackageIndex, prefix, defp->pc.proc_prefix,
                        ((definition *) listp->val)->pc.proc_name);
-               defp = (definition *) listp->val;
            }
        }
        listp = listp->next;
@@ -2056,6 +2007,13 @@ er_ProcMainBody_setup(void)
                PackagePrefix[PackageIndex], PackagePrefix[PackageIndex]);
        f_print(fout, "\treturn opnames%d[op - %sLOWEST_OPCODE];\n}\n",
                PackageIndex, PackagePrefix[PackageIndex]);
+       f_print(fout, "struct %sstats *%sOpCodeStats(int op)\n{\n",
+               PackagePrefix[PackageIndex], PackagePrefix[PackageIndex]);
+       f_print(fout, "\tif (op < %sLOWEST_OPCODE || op > %sHIGHEST_OPCODE)\n\t\treturn NULL;\n",
+               PackagePrefix[PackageIndex], PackagePrefix[PackageIndex]);
+       f_print(fout, "\treturn NULL;/*%d %s*/\n}\n",
+               PackageIndex, PackagePrefix[PackageIndex]);
+
        return;
     }
     f_print(fout, "int %s%sExecuteRequest(struct rx_call *z_call)\n",
@@ -2075,6 +2033,14 @@ er_ProcMainBody_setup(void)
     f_print(fout, "\treturn hton_syserr_conv(z_result);\n}\n");
 }
 
+static void
+er_HeadofOldStyleProc_setup2(void)
+{
+    if ( cflag ) {
+       f_print(fout, "int %sOpCodeIndex(int op)\n{\n", (combinepackages ? MasterPrefix : PackagePrefix[PackageIndex]));
+        f_print(fout, "\tswitch (op) {\n");
+    }
+}
 
 static void
 er_HeadofOldStyleProc_setup(void)
@@ -2144,6 +2110,44 @@ proc_er_case(definition * defp)
     f_print(fout, "\t\t\tbreak;\n");
 }
 
+static void
+proc_op_case(definition * defp)
+{
+    f_print(fout, "\t\tcase %d:", defp->pc.proc_opcodenum);
+    f_print(fout, "\treturn %d;\n",
+           defp->statindex);
+}
+
+static void
+er_BodyofOldStyleProc_setup2(void)
+{
+    list *listp;
+
+    if (!cflag)
+       return;
+    if (combinepackages) {
+       int temp = PackageIndex;
+       for (PackageIndex = 0; PackageIndex <= temp; PackageIndex++) {
+           for (listp = proc_defined[PackageIndex]; listp != NULL;
+                listp = listp->next)
+               proc_op_case((definition *) listp->val);
+       }
+       PackageIndex = temp;
+    } else {
+       for (listp = proc_defined[PackageIndex]; listp != NULL;
+            listp = listp->next)
+           proc_op_case((definition *) listp->val);
+    }
+}
+
+static void
+er_TailofOldStyleProc_setup2(void)
+{
+    if ( cflag ) {
+       f_print(fout, "\t\tdefault:\n");
+       f_print(fout, "\t\t\treturn -1;\n\t}\n}\n");
+    }
+}
 
 static void
 er_TailofOldStyleProc_setup(void)
@@ -2169,9 +2173,11 @@ h_ProcMainBody_setup(void)
 static void
 h_HeadofOldStyleProc_setup(void)
 {
+    char *pprefix = (combinepackages ? MasterPrefix :
+                    PackagePrefix[PackageIndex]);
+    f_print(fout,"\nstruct %sstats{\n\tint statsver;\n};", pprefix);
     f_print(fout,"\nextern int %s%sExecuteRequest(struct rx_call *);\n",
-           prefix,
-           (combinepackages ? MasterPrefix : PackagePrefix[PackageIndex]));
+           prefix, pprefix);
     f_print(fout,"\nextern int %sOpCodeIndex(int op);\n", PackagePrefix[PackageIndex]);
 }