/* @(#)rpc_cout.c 2.1 88/08/01 4.0 RPCSRC */
* Sun RPC is a product of Sun Microsystems, Inc. and is provided for
* unrestricted use provided that this legend is included on all tape
* media and as a part of the software program in whole or part. Users
* 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
* 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.
* Mountain View, California 94043
static char sccsid
[] = "@(#)rpc_cout.c 1.8 87/06/24 (C) 1987 SMI";
* rpc_cout.c, XDR routine outputter for the RPC protocol compiler
* Copyright (C) 1987, Sun Microsystems, Inc.
* Emit the C-routine for the given definition
if (def
->def_kind
== DEF_PROGRAM
|| def
->def_kind
== DEF_CONST
) {
if (def
->def_kind
== DEF_PROGRAM
|| def
->def_kind
== DEF_CONST
) {
return (streq(def
->def_name
, type
));
def
= (definition
*) FINDVAL(defined
, type
, findtype
);
f_print(fout
, "bool_t\n");
f_print(fout
, "xdr_%s(xdrs, objp)\n", def
->def_name
);
f_print(fout
, "\tXDR *xdrs;\n");
f_print(fout
, "\t%s ", def
->def_name
);
if (def
->def_kind
!= DEF_TYPEDEF
||
!isvectordef(def
->def
.ty
.old_type
, def
->def
.ty
.rel
)) {
f_print(fout
, "objp;\n");
f_print(fout
, "\treturn (TRUE);\n");
print_ifopen(indent
, name
)
f_print(fout
, "if (!xdr_%s(xdrs", name
);
f_print(fout
, ", %s", arg
);
print_ifsizeof(prefix
, type
)
if (streq(type
, "bool")) {
f_print(fout
, ", sizeof(bool_t), xdr_bool");
f_print(fout
, ", sizeof(");
if (undefined(type
) && prefix
) {
f_print(fout
, "%s ", prefix
);
f_print(fout
, "%s), xdr_%s", type
, type
);
f_print(fout
, "\treturn (FALSE);\n");
print_ifstat(indent
, prefix
, type
, rel
, amax
, objname
, name
)
print_ifopen(indent
, "pointer");
print_ifarg("(char **)");
f_print(fout
, "%s", objname
);
print_ifsizeof(prefix
, type
);
if (streq(type
, "string")) {
} else if (streq(type
, "opaque")) {
print_ifopen(indent
, alt
);
print_ifopen(indent
, "vector");
f_print(fout
, "%s", objname
);
print_ifsizeof(prefix
, type
);
if (streq(type
, "string")) {
} else if (streq(type
, "opaque")) {
if (streq(type
, "string")) {
print_ifopen(indent
, alt
);
print_ifopen(indent
, alt
);
print_ifopen(indent
, "array");
print_ifarg("(char **)");
f_print(fout
, "%s.%s_val, (u_int *)%s.%s_len",
objname
, name
, objname
, name
);
f_print(fout
, "&%s->%s_val, (u_int *)&%s->%s_len",
objname
, name
, objname
, name
);
print_ifsizeof(prefix
, type
);
print_ifopen(indent
, type
);
print_ifarg("(enum_t *)objp");
char *format
= "&objp->%s_u.%s";
print_stat(&def
->def
.un
.enum_decl
);
f_print(fout
, "\tswitch (objp->%s) {\n", def
->def
.un
.enum_decl
.name
);
for (cl
= def
->def
.un
.cases
; cl
!= NULL
; cl
= cl
->next
) {
f_print(fout
, "\tcase %s:\n", cl
->case_name
);
if (!streq(cs
->type
, "void")) {
object
= alloc(strlen(def
->def_name
) + strlen(format
) +
s_print(object
, format
, def
->def_name
, cs
->name
);
print_ifstat(2, cs
->prefix
, cs
->type
, cs
->rel
, cs
->array_max
,
f_print(fout
, "\t\tbreak;\n");
dflt
= def
->def
.un
.default_decl
;
if (!streq(dflt
->type
, "void")) {
f_print(fout
, "\tdefault:\n");
object
= alloc(strlen(def
->def_name
) + strlen(format
) +
s_print(object
, format
, def
->def_name
, dflt
->name
);
print_ifstat(2, dflt
->prefix
, dflt
->type
, dflt
->rel
,
dflt
->array_max
, object
, dflt
->name
);
f_print(fout
, "\t\tbreak;\n");
f_print(fout
, "\tdefault:\n");
f_print(fout
, "\t\treturn (FALSE);\n");
for (dl
= def
->def
.st
.decls
; dl
!= NULL
; dl
= dl
->next
) {
char *prefix
= def
->def
.ty
.old_prefix
;
char *type
= def
->def
.ty
.old_type
;
char *amax
= def
->def
.ty
.array_max
;
relation rel
= def
->def
.ty
.rel
;
print_ifstat(1, prefix
, type
, rel
, amax
, "objp", def
->def_name
);
char *prefix
= dec
->prefix
;
char *amax
= dec
->array_max
;
if (isvectordef(type
, rel
)) {
s_print(name
, "objp->%s", dec
->name
);
s_print(name
, "&objp->%s", dec
->name
);
print_ifstat(1, prefix
, type
, rel
, amax
, name
, dec
->name
);