version 1.6, 2001/07/18 22:26:00 |
version 1.7, 2001/11/07 18:44:28 |
|
|
|
|
if (strcmp(def->def.ty.old_type, def->def_name) == 0) |
if (strcmp(def->def.ty.old_type, def->def_name) == 0) |
return; |
return; |
}; |
} |
|
|
print_header(def); |
print_header(def); |
switch (def->def_kind) { |
switch (def->def_kind) { |
|
|
f_print(fout, "%s ", procname); |
f_print(fout, "%s ", procname); |
if (pointerp) |
if (pointerp) |
f_print(fout, "*"); |
f_print(fout, "*"); |
f_print(fout, "objp)\n{\n\n"); |
f_print(fout, "objp)\n{\n"); |
} else { |
} else { |
f_print(fout, "xdr_%s(xdrs, objp)\n", procname); |
f_print(fout, "xdr_%s(xdrs, objp)\n", procname); |
f_print(fout, "\tXDR *xdrs;\n"); |
f_print(fout, "\tXDR *xdrs;\n"); |
f_print(fout, "\t%s ", procname); |
f_print(fout, "\t%s ", procname); |
if (pointerp) |
if (pointerp) |
f_print(fout, "*"); |
f_print(fout, "*"); |
f_print(fout, "objp;\n{\n\n"); |
f_print(fout, "objp;\n{\n"); |
} |
} |
} |
} |
|
|
|
|
if (doinline == 0) |
if (doinline == 0) |
return; |
return; |
/* May cause lint to complain. but ... */ |
/* May cause lint to complain. but ... */ |
f_print(fout, "\t register int32_t *buf;\n\n"); |
f_print(fout, "\tint32_t *buf;\n\n"); |
|
|
} |
} |
|
|
|
|
char *name; |
char *name; |
{ |
{ |
tabify(fout, indent); |
tabify(fout, indent); |
f_print(fout, " if (!xdr_%s(xdrs", name); |
f_print(fout, "if (!xdr_%s(xdrs", name); |
} |
} |
|
|
static |
static |
|
|
{ |
{ |
f_print(fout, ")) {\n"); |
f_print(fout, ")) {\n"); |
tabify(fout, indent); |
tabify(fout, indent); |
f_print(fout, "\t return (FALSE);\n"); |
f_print(fout, "\treturn (FALSE);\n"); |
tabify(fout, indent); |
tabify(fout, indent); |
f_print(fout, " }\n"); |
f_print(fout, "}\n"); |
} |
} |
|
|
static |
static |
|
|
} |
} |
for (dl = def->def.st.decls; dl != NULL; dl = dl->next) |
for (dl = def->def.st.decls; dl != NULL; dl = dl->next) |
if (dl->decl.rel == REL_VECTOR) { |
if (dl->decl.rel == REL_VECTOR) { |
f_print(fout, "\t int i;\n"); |
f_print(fout, "\tint i;\n"); |
break; |
break; |
} |
} |
size = 0; |
size = 0; |
|
|
else { |
else { |
can_inline = 1; |
can_inline = 1; |
break; /* can be inlined */ |
break; /* can be inlined */ |
}; |
} |
} else { |
} else { |
if (size >= doinline) { |
if (size >= doinline) { |
can_inline = 1; |
can_inline = 1; |
|
|
for (dl = def->def.st.decls; dl != NULL; dl = dl->next) |
for (dl = def->def.st.decls; dl != NULL; dl = dl->next) |
print_stat(1, &dl->decl); |
print_stat(1, &dl->decl); |
return; |
return; |
}; |
} |
|
|
|
|
|
|
|
|
for (j = 0; j < 2; j++) { |
for (j = 0; j < 2; j++) { |
|
|
if (flag == PUT) |
if (flag == PUT) |
f_print(fout, "\n\t if (xdrs->x_op == XDR_ENCODE) {\n"); |
f_print(fout, "\n\tif (xdrs->x_op == XDR_ENCODE) {\n"); |
else |
else |
f_print(fout, "\n \t return (TRUE);\n\t} else if (xdrs->x_op == XDR_DECODE) {\n"); |
f_print(fout, "\t\treturn (TRUE);\n\t} else if (xdrs->x_op == XDR_DECODE) {\n"); |
|
|
|
|
i = 0; |
i = 0; |
|
|
sizestr = (char *)realloc(sizestr, strlen(sizestr) + strlen(ptemp) + 1); |
sizestr = (char *)realloc(sizestr, strlen(sizestr) + strlen(ptemp) + 1); |
if (sizestr == NULL) { |
if (sizestr == NULL) { |
|
|
f_print(stderr, "Fatal error : no memory \n"); |
f_print(stderr, "Fatal error : no memory\n"); |
crash(); |
crash(); |
}; |
} |
sizestr = strcat(sizestr, ptemp); /* build up length of |
sizestr = strcat(sizestr, ptemp); /* build up length of |
* array */ |
* array */ |
|
|
|
|
/* don't expand into inline |
/* don't expand into inline |
* code if size < doinline */ |
* code if size < doinline */ |
while (cur != dl) { |
while (cur != dl) { |
print_stat(1, &cur->decl); |
print_stat(2, &cur->decl); |
cur = cur->next; |
cur = cur->next; |
} |
} |
} else { |
} else { |
|
|
/* were already looking at a |
/* were already looking at a |
* xdr_inlineable structure */ |
* xdr_inlineable structure */ |
if (sizestr == NULL) |
if (sizestr == NULL) |
f_print(fout, "\t buf = (int32_t *)XDR_INLINE(xdrs,%d * BYTES_PER_XDR_UNIT);", |
f_print(fout, "\t\tbuf = (int32_t *)XDR_INLINE(xdrs, %d * BYTES_PER_XDR_UNIT);", |
size); |
size); |
else |
else |
if (size == 0) |
if (size == 0) |
f_print(fout, |
f_print(fout, |
"\t buf = (int32_t *)XDR_INLINE(xdrs,%s * BYTES_PER_XDR_UNIT);", |
"\t\tbuf = (int32_t *)XDR_INLINE(xdrs, %s * BYTES_PER_XDR_UNIT);", |
sizestr); |
sizestr); |
else |
else |
f_print(fout, |
f_print(fout, |
"\t buf = (int32_t *)XDR_INLINE(xdrs,(%d + %s)* BYTES_PER_XDR_UNIT);", |
"\t\tbuf = (int32_t *)XDR_INLINE(xdrs, (%d + %s)* BYTES_PER_XDR_UNIT);", |
size, sizestr); |
size, sizestr); |
|
|
f_print(fout, "\n\t if (buf == NULL) {\n"); |
f_print(fout, "\n\t\tif (buf == NULL) {\n"); |
|
|
psav = cur; |
psav = cur; |
while (cur != dl) { |
while (cur != dl) { |
print_stat(2, &cur->decl); |
print_stat(3, &cur->decl); |
cur = cur->next; |
cur = cur->next; |
} |
} |
|
|
f_print(fout, "\n\t }\n\t else {\n"); |
f_print(fout, "\t\t} else {\n"); |
|
|
cur = psav; |
cur = psav; |
while (cur != dl) { |
while (cur != dl) { |
|
|
cur = cur->next; |
cur = cur->next; |
} |
} |
|
|
f_print(fout, "\t }\n"); |
f_print(fout, "\t\t}\n"); |
} |
} |
size = 0; |
size = 0; |
i = 0; |
i = 0; |
sizestr = NULL; |
sizestr = NULL; |
print_stat(1, &dl->decl); |
print_stat(2, &dl->decl); |
} |
} |
|
|
} |
} |
|
|
/* don't expand into inline code if size < |
/* don't expand into inline code if size < |
* doinline */ |
* doinline */ |
while (cur != dl) { |
while (cur != dl) { |
print_stat(1, &cur->decl); |
print_stat(2, &cur->decl); |
cur = cur->next; |
cur = cur->next; |
} |
} |
} else { |
} else { |
|
|
/* were already looking at a xdr_inlineable |
/* were already looking at a xdr_inlineable |
* structure */ |
* structure */ |
if (sizestr == NULL) |
if (sizestr == NULL) |
f_print(fout, "\t\tbuf = (int32_t *)XDR_INLINE(xdrs,%d * BYTES_PER_XDR_UNIT);", |
f_print(fout, "\t\tbuf = (int32_t *)XDR_INLINE(xdrs, %d * BYTES_PER_XDR_UNIT);", |
size); |
size); |
else |
else |
if (size == 0) |
if (size == 0) |
f_print(fout, |
f_print(fout, |
"\t\tbuf = (int32_t *)XDR_INLINE(xdrs,%s * BYTES_PER_XDR_UNIT);", |
"\t\tbuf = (int32_t *)XDR_INLINE(xdrs, %s * BYTES_PER_XDR_UNIT);", |
sizestr); |
sizestr); |
else |
else |
f_print(fout, |
f_print(fout, |
"\t\tbuf = (int32_t *)XDR_INLINE(xdrs,(%d + %s)* BYTES_PER_XDR_UNIT);", |
"\t\tbuf = (int32_t *)XDR_INLINE(xdrs, (%d + %s)* BYTES_PER_XDR_UNIT);", |
size, sizestr); |
size, sizestr); |
|
|
f_print(fout, "\n\t\tif (buf == NULL) {\n"); |
f_print(fout, "\n\t\tif (buf == NULL) {\n"); |
|
|
psav = cur; |
psav = cur; |
while (cur != NULL) { |
while (cur != NULL) { |
print_stat(2, &cur->decl); |
print_stat(3, &cur->decl); |
cur = cur->next; |
cur = cur->next; |
} |
} |
f_print(fout, "\n\t }\n\t else {\n"); |
f_print(fout, "\t\t} else {\n"); |
|
|
cur = psav; |
cur = psav; |
while (cur != dl) { |
while (cur != dl) { |
|
|
cur = cur->next; |
cur = cur->next; |
} |
} |
|
|
f_print(fout, "\t }\n"); |
f_print(fout, "\t\t}\n"); |
|
|
} |
} |
flag = GET; |
flag = GET; |
} |
} |
f_print(fout, "\t return(TRUE);\n\t}\n\n"); |
f_print(fout, "\t\treturn (TRUE);\n\t}\n\n"); |
|
|
/* now take care of XDR_FREE case */ |
/* now take care of XDR_FREE case */ |
|
|
|
|
|
|
switch (decl->rel) { |
switch (decl->rel) { |
case REL_ALIAS: |
case REL_ALIAS: |
|
f_print(fout, "\t"); |
emit_single_in_line(decl, flag, REL_ALIAS); |
emit_single_in_line(decl, flag, REL_ALIAS); |
break; |
break; |
case REL_VECTOR: |
case REL_VECTOR: |
f_print(fout, "\t\t{ register %s *genp; \n", decl->type); |
f_print(fout, "\t\t\t{\n\t\t\t\t%s *genp;\n\n", decl->type); |
f_print(fout, "\t\t for ( i = 0,genp=objp->%s;\n \t\t\ti < %s; i++){\n\t\t", |
f_print(fout, "\t\t\t\tfor (i = 0, genp = objp->%s;\n\t\t\t\t i < %s; i++) {\n\t\t\t", |
decl->name, decl->array_max); |
decl->name, decl->array_max); |
emit_single_in_line(decl, flag, REL_VECTOR); |
emit_single_in_line(decl, flag, REL_VECTOR); |
f_print(fout, "\t\t }\n\t\t };\n"); |
f_print(fout, "\t\t\t\t}\n\t\t\t}\n"); |
|
|
} |
} |
} |
} |
|
|
|
|
|
|
if (flag == PUT) |
if (flag == PUT) |
f_print(fout, "\t\t IXDR_PUT_"); |
f_print(fout, "\t\tIXDR_PUT_"); |
else |
else |
if (rel == REL_ALIAS) |
if (rel == REL_ALIAS) |
f_print(fout, "\t\t objp->%s = IXDR_GET_", decl->name); |
f_print(fout, "\t\tobjp->%s = IXDR_GET_", decl->name); |
else |
else |
f_print(fout, "\t\t *genp++ = IXDR_GET_"); |
f_print(fout, "\t\t*genp++ = IXDR_GET_"); |
|
|
upp_case = upcase(decl->type); |
upp_case = upcase(decl->type); |
|
|
|
|
} |
} |
if (flag == PUT) |
if (flag == PUT) |
if (rel == REL_ALIAS) |
if (rel == REL_ALIAS) |
f_print(fout, "%s(buf,objp->%s);\n", upp_case, decl->name); |
f_print(fout, "%s(buf, objp->%s);\n", upp_case, decl->name); |
else |
else |
f_print(fout, "%s(buf,*genp++);\n", upp_case); |
f_print(fout, "%s(buf, *genp++);\n", upp_case); |
|
|
else |
else |
f_print(fout, "%s(buf);\n", upp_case); |
f_print(fout, "%s(buf);\n", upp_case); |
|
|
|
|
ptr = (char *) malloc(strlen(str)+1); |
ptr = (char *) malloc(strlen(str)+1); |
if (ptr == (char *) NULL) { |
if (ptr == (char *) NULL) { |
f_print(stderr, "malloc failed \n"); |
f_print(stderr, "malloc failed\n"); |
exit(1); |
exit(1); |
}; |
} |
|
|
hptr = ptr; |
hptr = ptr; |
while (*str != '\0') |
while (*str != '\0') |