示例#1
0
文件: rpc_cout.c 项目: hwr/openafs
static void
emit_union(definition * def)
{
    declaration *dflt;
    case_list *cl;
    declaration *cs;
    char *object;
    char *format = "&objp->%s_u.%s";
    char *briefformat = "&objp->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) {
	cs = &cl->case_decl;
	f_print(fout, "\tcase %s:\n", cl->case_name);
	if (!streq(cs->type, "void")) {
	    object =
		alloc(strlen(def->def_name) + strlen(format) +
		      strlen(cs->name) + 1);

	    if (brief_flag)
		s_print(object, briefformat, cs->name);
	    else
		s_print(object, format, def->def_name, cs->name);

	    print_ifstat(2, cs->prefix, cs->type, cs->rel, cs->array_max,
			 object, cs->name);
	    free(object);
	}
	f_print(fout, "\t\tbreak;\n");
    }
    dflt = def->def.un.default_decl;
    if (dflt != NULL) {
	if (!streq(dflt->type, "void")) {
	    f_print(fout, "\tdefault:\n");
	    object =
		alloc(strlen(def->def_name) + strlen(format) +
		      strlen(dflt->name) + 1);
	    s_print(object, format, def->def_name, dflt->name);
	    print_ifstat(2, dflt->prefix, dflt->type, dflt->rel,
			 dflt->array_max, object, dflt->name);
	    free(object);
	    f_print(fout, "\t\tbreak;\n");
	}
    } else {
	f_print(fout, "\tdefault:\n");
	f_print(fout, "\t\treturn (FALSE);\n");
    }
    f_print(fout, "\t}\n");
}
示例#2
0
static void
emit_typedef(definition * def)
{
    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);
}
示例#3
0
static void
print_cout(declaration * dec)
{
    if (cflag) {
	space();
	f_print(fout, "bool_t\n");
	f_print(fout, "xdr_%s(XDR *xdrs, %s *objp)\n", dec->name, dec->name);
	f_print(fout, "{\n");
	print_ifstat(1, dec->prefix, dec->type, dec->rel, dec->array_max,
		     "objp", dec->name);
	print_trailer();
    }
}
示例#4
0
static void
print_stat(declaration * dec)
{
    char *prefix = dec->prefix;
    char *type = dec->type;
    char *amax = dec->array_max;
    relation rel = dec->rel;
    char name[256];

    if (isvectordef(type, rel)) {
	s_print(name, "objp->%s", dec->name);
    } else {
	s_print(name, "&objp->%s", dec->name);
    }
    print_ifstat(1, prefix, type, rel, amax, name, dec->name);
}
static void
emit_union (definition * def)
{
  declaration *dflt;
  case_list *cl;
  declaration *cs;
  char *object;
#if 1
  char *vecformat = "objp->RPC_UNION_NAME(%s).%s";
  char *format = "&objp->RPC_UNION_NAME(%s).%s";
#else
  char *vecformat = "objp->u.%s";
  char *format = "&objp->u.%s";
#endif

  print_stat (1, &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 (cl->contflag == 1)	/* a continued case statement */
      continue;
    cs = &cl->case_decl;
    if (!streq (cs->type, "void")) {
      object = alloc (strlen (def->def_name) + strlen (format) +
		      strlen (cs->name) + 1);
#if 1
      if (isvectordef (cs->type, cs->rel)) {
	s_print (object, vecformat, def->def_name,
		 cs->name);
      }
      else {
	s_print (object, format, def->def_name,
		 cs->name);
      }
#else
      if (isvectordef (cs->type, cs->rel))
	s_print (object, vecformat, cs->name);
      else
	s_print (object, format, cs->name);
#endif
      print_ifstat (2, cs->prefix, cs->type, cs->rel, cs->array_max,
		    object, cs->name);
      free (object);
    }
    f_print (fout, "\t\tbreak;\n");
  }
  dflt = def->def.un.default_decl;
  if (dflt != NULL) {
    if (!streq (dflt->type, "void")) {
      f_print (fout, "\tdefault:\n");
      object = alloc (strlen (def->def_name) + strlen (format) +
		      strlen (dflt->name) + 1);
#if 1
      if (isvectordef (dflt->type, dflt->rel)) {
	s_print (object, vecformat, def->def_name,
		 dflt->name);
      }
      else {
	s_print (object, format, def->def_name,
		 dflt->name);
      }
#else
      if (isvectordef (dflt->type, dflt->rel))
	s_print (object, vecformat, dflt->name);
      else
	s_print (object, format, dflt->name);
#endif

      print_ifstat (2, dflt->prefix, dflt->type, dflt->rel,
		    dflt->array_max, object, dflt->name);
      free (object);
      f_print (fout, "\t\tbreak;\n");
    }
  }
  else {
    f_print (fout, "\tdefault:\n");
    f_print (fout, "\t\treturn (FALSE);\n");
  }

  f_print (fout, "\t}\n");
}