* 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_parse.c, Parser for the RPC protocol compiler
+ * rpc_parse.c, Parser for the RPC protocol compiler
* Copyright (C) 1987 Sun Microsystems, Inc.
*/
#include <afsconfig.h>
#include <afs/param.h>
-RCSID
- ("$Header$");
#include <stdlib.h>
#include <stdio.h>
token tok;
defp = ALLOC(definition);
- memset((char *)defp, 0, sizeof(definition));
+ memset(defp, 0, sizeof(definition));
get_token(&tok);
switch (tok.kind) {
case TOK_STRUCT:
do {
get_token(tokp);
Proc_list = ALLOC(proc1_list);
- memset((char *)Proc_list, 0, sizeof(proc1_list));
+ memset(Proc_list, 0, sizeof(proc1_list));
Proc_list->pl.param_flag = 0;
switch (tokp->kind) {
case TOK_IN:
*Proc_listp = Proc_list;
Proc_listp = &Proc_list->next;
decls = ALLOC(decl_list);
- memset((char *)decls, 0, sizeof(decl_list));
+ memset(decls, 0, sizeof(decl_list));
if (tokp->kind != TOK_RPAREN)
decls->decl = dec;
*tailp = decls;
handle_split_proc(definition * defp, int multi_flag)
{
char *startname = SplitStart, *endname = SplitEnd;
- int numofparams;
+ int numofparams = 0;
if (!startname)
startname = "Start";
if (ansic_flag) {
if (split_flag) {
- first_arg = "register struct rx_call *z_call";
+ first_arg = "struct rx_call *z_call";
} else {
- first_arg = "register struct rx_connection *z_conn";
+ first_arg = "struct rx_connection *z_conn";
}
} else {
if (split_flag) {
plist->pl.param_name);
}
} else {
- f_print(fout, ", %s", plist->pl.param_name);
+ f_print(fout, ", %s", plist->pl.param_name);
plist->pl.param_flag &= ~PROCESSED_PARAM;
}
}
return;
if (!split_flag)
- f_print(fout, "\tregister struct rx_connection *z_conn;\n");
+ f_print(fout, "\tstruct rx_connection *z_conn;\n");
if (split_flag) {
- f_print(fout, "\tregister struct rx_call *z_call;\n");
+ f_print(fout, "\tstruct rx_call *z_call;\n");
}
for (plist = defp->pc.plists; plist; plist = plist->next) {
if (plist->component_kind == DEF_PARAM
switch (defp1->pc.rel) {
case REL_ARRAY:
case REL_POINTER:
+ default:
break;
}
}
f_print(fout, "\n\t%s = 0;", plist->pl.param_name);
plist->pl.string_name = NULL;
break;
+ default:
+ break;
}
}
}
f_print(fout, "\tz_xdrs->x_op = XDR_FREE;\n");
for (plist = defp->pc.plists; plist; plist = plist->next) {
if (plist->component_kind == DEF_PARAM
- && (plist->pl.param_flag & FREETHIS_PARAM)) {
- char *dot = "", *extens = "";
- if (plist->pl.string_name) {
- dot = ".";
- extens = plist->pl.string_name;
- }
+ && (plist->pl.param_flag & FREETHIS_PARAM))
f_print(fout, "\tif (!%s) goto fail1;\n", plist->scode);
- }
}
for (listp = typedef_defined; listp != NULL; listp = listp->next) {
defp1 = (definition *) listp->val;
f_print(fout, "\tif (!%s) goto fail1;\n",
plist->scode);
break;
+ default:
+ break;
}
}
}
if (!cflag) {
if (ansic_flag) {
- f_print(fout, "int %s%s%s%s(register struct ubik_client *aclient, afs_int32 aflags",
+ f_print(fout, "int %s%s%s%s(struct ubik_client *aclient, afs_int32 aflags",
procheader, prefix, PackagePrefix[PackageIndex],
defp->pc.proc_name);
} else {
if (ansic_flag)
return;
- f_print(fout, "\tregister struct ubik_client *aclient;\n\tafs_int32 aflags;\n");
+ f_print(fout, "\tstruct ubik_client *aclient;\n\tafs_int32 aflags;\n");
for (plist = defp->pc.plists; plist; plist = plist->next) {
if (plist->component_kind == DEF_PARAM
&& !(plist->pl.param_flag & PROCESSED_PARAM)) {
proc1_list *plist;
f_print(fout, "{\tafs_int32 rcode, code, newHost, thisHost, i, _ucount;\n");
- f_print(fout, "\tint chaseCount, pass, needsync, inlist;\n");
+ f_print(fout, "\tint chaseCount, pass, needsync;\n");
#if 0 /* goes with block below */
- f_print(fout, "\tint j;\n");
+ f_print(fout, "\tint j, inlist;\n");
#endif
f_print(fout, "\tstruct rx_connection *tc;\n");
f_print(fout, "\tstruct rx_peer *rxp;\n");
f_print(fout, "\t restart:\n");
f_print(fout, "\torigLevel = aclient->initializationState;\n");
f_print(fout, "\trcode = UNOSERVERS;\n");
- f_print(fout, "\tchaseCount = inlist = needsync = 0;\n\n");
+ f_print(fout, "\tchaseCount = needsync = 0;\n\n");
#if 0 /* We should do some sort of caching algorithm for this, but I need to think about it - shadow 26 jun 06 */
+ f_print(fout, "\tinlist = 0;\n");
f_print(fout, "\tLOCK_UCLNT_CACHE;\n");
f_print(fout, "\tfor (j = 0; ((j < SYNCCOUNT) && calls_needsync[j]); j++) {\n");
f_print(fout, "\t\tif (calls_needsync[j] == (int *)%s%s%s) {\n", prefix, PackagePrefix[PackageIndex], defp->pc.proc_name);
f_print(fout, "\t\tif ((pass == 0) && (aclient->states[_ucount] & CFLastFailed)) {\n");
f_print(fout, "\t\t\tcontinue; /* this guy's down */\n");
f_print(fout, "\t\t}\n");
-
+
f_print(fout, "\t\trcode = %s%s%s(tc\n", prefix, PackagePrefix[PackageIndex], defp->pc.proc_name);
for (plist = defp->pc.plists; plist; plist = plist->next) {
if (plist->component_kind == DEF_PARAM) {
f_print(fout, "\t} /*p */\n\n");
f_print(fout, "\tdone:\n");
f_print(fout, "\tif (needsync) {\n");
- f_print(fout, "\t\tif (!inlist) { /* Remember proc call that needs sync site */\n");
+
#if 0 /* We should do some sort of caching algorithm for this, but I need to think about it - shadow 26 jun 06 */
+ f_print(fout, "\t\tif (!inlist) { /* Remember proc call that needs sync site */\n");
f_print(fout, "\t\t\tLOCK_UCLNT_CACHE;\n");
f_print(fout, "\t\t\tcalls_needsync[synccount % SYNCCOUNT] = (int *)%s%s%s;\n", prefix, PackagePrefix[PackageIndex], defp->pc.proc_name);
f_print(fout, "\t\t\tsynccount++;\n");
f_print(fout, "\t\t\tUNLOCK_UCLNT_CACHE;\n");
-#endif
f_print(fout, "\t\t\tinlist = 1;\n");
f_print(fout, "\t\t}\n");
+#endif
f_print(fout, "\t\tif (!rcode) { /* Remember the sync site - cmd successful */\n");
f_print(fout, "\t\t\trxp = rx_PeerOf(aclient->conns[_ucount]);\n");
f_print(fout, "\t\t\taclient->syncSite = rx_HostOf(rxp);\n");
static void
er_ProcMainBody_setup(void)
{
- f_print(fout, "int %s%sExecuteRequest(register struct rx_call *z_call)\n",
+ f_print(fout, "int %s%sExecuteRequest(struct rx_call *z_call)\n",
prefix, PackagePrefix[PackageIndex]);
f_print(fout, "{\n\tint op;\n");
f_print(fout, "\tXDR z_xdrs;\n");
er_HeadofOldStyleProc_setup(void)
{
f_print(fout,
- "\nint %s%sExecuteRequest (register struct rx_call *z_call)\n",
+ "\nint %s%sExecuteRequest (struct rx_call *z_call)\n",
prefix,
(combinepackages ? MasterPrefix : PackagePrefix[PackageIndex]));
f_print(fout, "{\n");
f_print(fout, "\treturn z_result;\n}\n");
}
+static void
+h_ProcMainBody_setup(void)
+{
+ f_print(fout,"\nextern int %s%sExecuteRequest(struct rx_call *);\n",
+ prefix, PackagePrefix[PackageIndex]);
+}
+
+static void
+h_HeadofOldStyleProc_setup(void)
+{
+ f_print(fout,"\nextern int %s%sExecuteRequest(struct rx_call *);\n",
+ prefix,
+ (combinepackages ? MasterPrefix : PackagePrefix[PackageIndex]));
+}
+
+void
+h_Proc_CodeGeneration(void)
+{
+ int temp;
+
+ temp = PackageIndex;
+ if (!combinepackages)
+ PackageIndex = 0;
+ for (; PackageIndex <= temp; PackageIndex++) {
+ if (combinepackages || opcode_holes_exist()) {
+ h_HeadofOldStyleProc_setup();
+ } else {
+ h_ProcMainBody_setup();
+ }
+ }
+ PackageIndex = temp;
+}
void
h_opcode_stats(void)