[BACK]Return to rpc_cout.c CVS log [TXT][DIR] Up to [local] / src / usr.bin / rpcgen

Diff for /src/usr.bin/rpcgen/rpc_cout.c between version 1.7 and 1.8

version 1.7, 2001/11/07 18:44:28 version 1.8, 2001/11/24 19:17:47
Line 41 
Line 41 
 #include <stdio.h>  #include <stdio.h>
 #include <stdlib.h>  #include <stdlib.h>
 #include <string.h>  #include <string.h>
   #include <ctype.h>
 #include "rpc_parse.h"  #include "rpc_parse.h"
 #include "rpc_util.h"  #include "rpc_util.h"
   
 static findtype __P((definition *, char *));  static int findtype __P((definition *, char *));
 static undefined __P((char *));  static int undefined __P((char *));
 static print_generic_header __P((char *, int));  static void print_generic_header __P((char *, int));
 static print_header __P((definition *));  static void print_header __P((definition *));
 static print_prog_header __P((proc_list *));  static void print_prog_header __P((proc_list *));
 static print_trailer __P((void));  static void print_trailer __P((void));
 static print_ifopen __P((int, char *));  static void print_ifopen __P((int, char *));
 static print_ifarg __P((char *));  static void print_ifarg __P((char *));
 static print_ifsizeof __P((char *, char *));  static void print_ifsizeof __P((char *, char *));
 static print_ifclose __P((int));  static void print_ifclose __P((int));
 static print_ifstat __P((int, char *, char *, relation, char *, char *, char *));  static void print_ifstat __P((int, char *, char *, relation, char *, char *, char *));
 static emit_num __P((definition *));  static void emit_num __P((definition *));
 static emit_program __P((definition *));  static void emit_program __P((definition *));
 static emit_enum __P((definition *));  static void emit_enum __P((definition *));
 static emit_union __P((definition *));  static void emit_union __P((definition *));
 static emit_struct __P((definition *));  static void emit_struct __P((definition *));
 static emit_typedef __P((definition *));  static void emit_typedef __P((definition *));
 static print_stat __P((int, declaration *));  static void print_stat __P((int, declaration *));
   void emit_inline __P((declaration *, int));
   void emit_single_in_line __P((declaration *, int, relation));
   
   
 /*  /*
  * Emit the C-routine for the given definition   * Emit the C-routine for the given definition
  */   */
Line 105 
Line 107 
         print_trailer();          print_trailer();
 }  }
   
 static  static int
 findtype(def, type)  findtype(def, type)
         definition *def;          definition *def;
         char   *type;          char    *type;
 {  {
   
         if (def->def_kind == DEF_PROGRAM || def->def_kind == DEF_CONST) {          if (def->def_kind == DEF_PROGRAM || def->def_kind == DEF_CONST) {
Line 118 
Line 120 
         }          }
 }  }
   
 static  static int
 undefined(type)  undefined(type)
         char   *type;          char    *type;
 {  {
         definition *def;          definition *def;
   
         def = (definition *) FINDVAL(defined, type, findtype);          def = (definition *) FINDVAL(defined, type, findtype);
   
   
         return (def == NULL);          return (def == NULL);
 }  }
   
 static  static void
 print_generic_header(procname, pointerp)  print_generic_header(procname, pointerp)
         char   *procname;          char    *procname;
         int     pointerp;          int     pointerp;
 {  {
         f_print(fout, "\n");          f_print(fout, "\n");
         f_print(fout, "bool_t\n");          f_print(fout, "bool_t\n");
Line 154 
Line 154 
         }          }
 }  }
   
 static  static void
 print_header(def)  print_header(def)
         definition *def;          definition *def;
 {  {
   
         decl_list *dl;  
         bas_type *ptr;  
         int     i;  
   
   
         print_generic_header(def->def_name,          print_generic_header(def->def_name,
             def->def_kind != DEF_TYPEDEF ||              def->def_kind != DEF_TYPEDEF ||
             !isvectordef(def->def.ty.old_type, def->def.ty.rel));              !isvectordef(def->def.ty.old_type, def->def.ty.rel));
   
         /* Now add Inline support */          /* Now add Inline support */
   
   
         if (doinline == 0)          if (doinline == 0)
                 return;                  return;
         /* May cause lint to complain. but  ... */          /* May cause lint to complain. but  ... */
         f_print(fout, "\tint32_t *buf;\n\n");          f_print(fout, "\tint32_t *buf;\n\n");
   
 }  }
   
 static  static void
 print_prog_header(plist)  print_prog_header(plist)
         proc_list *plist;          proc_list *plist;
 {  {
         print_generic_header(plist->args.argname, 1);          print_generic_header(plist->args.argname, 1);
 }  }
   
 static  static void
 print_trailer()  print_trailer()
 {  {
         f_print(fout, "\treturn (TRUE);\n");          f_print(fout, "\treturn (TRUE);\n");
         f_print(fout, "}\n");          f_print(fout, "}\n");
 }  }
   
   static void
 static  
 print_ifopen(indent, name)  print_ifopen(indent, name)
         int     indent;          int     indent;
         char   *name;          char   *name;
Line 202 
Line 193 
         f_print(fout, "if (!xdr_%s(xdrs", name);          f_print(fout, "if (!xdr_%s(xdrs", name);
 }  }
   
 static  static void
 print_ifarg(arg)  print_ifarg(arg)
         char   *arg;          char   *arg;
 {  {
         f_print(fout, ", %s", arg);          f_print(fout, ", %s", arg);
 }  }
   
 static  static void
 print_ifsizeof(prefix, type)  print_ifsizeof(prefix, type)
         char   *prefix;          char   *prefix;
         char   *type;          char   *type;
Line 225 
Line 216 
         }          }
 }  }
   
 static  static void
 print_ifclose(indent)  print_ifclose(indent)
         int     indent;          int     indent;
 {  {
Line 236 
Line 227 
         f_print(fout, "}\n");          f_print(fout, "}\n");
 }  }
   
 static  static void
 print_ifstat(indent, prefix, type, rel, amax, objname, name)  print_ifstat(indent, prefix, type, rel, amax, objname, name)
         int     indent;          int     indent;
         char   *prefix;          char   *prefix;
Line 314 
Line 305 
 }  }
   
 /* ARGSUSED */  /* ARGSUSED */
 static  static void
 emit_enum(def)  emit_enum(def)
         definition *def;          definition *def;
 {  {
Line 323 
Line 314 
         print_ifclose(1);          print_ifclose(1);
 }  }
   
 static  static void
 emit_program(def)  emit_program(def)
         definition *def;          definition *def;
 {  {
Line 344 
Line 335 
                 }                  }
 }  }
   
   static void
 static  
 emit_union(def)  emit_union(def)
         definition *def;          definition *def;
 {  {
Line 359 
Line 349 
         print_stat(1, &def->def.un.enum_decl);          print_stat(1, &def->def.un.enum_decl);
         f_print(fout, "\tswitch (objp->%s) {\n", def->def.un.enum_decl.name);          f_print(fout, "\tswitch (objp->%s) {\n", def->def.un.enum_decl.name);
         for (cl = def->def.un.cases; cl != NULL; cl = cl->next) {          for (cl = def->def.un.cases; cl != NULL; cl = cl->next) {
   
                 f_print(fout, "\tcase %s:\n", cl->case_name);                  f_print(fout, "\tcase %s:\n", cl->case_name);
                 if (cl->contflag == 1)  /* a continued case statement */                  if (cl->contflag == 1)  /* a continued case statement */
                         continue;                          continue;
Line 407 
Line 396 
         f_print(fout, "\t}\n");          f_print(fout, "\t}\n");
 }  }
   
 static  static void
 emit_struct(def)  emit_struct(def)
         definition *def;          definition *def;
 {  {
Line 419 
Line 408 
         char    ptemp[256];          char    ptemp[256];
         int     can_inline;          int     can_inline;
   
   
         if (doinline == 0) {          if (doinline == 0) {
                 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);
Line 436 
Line 424 
                 if ((dl->decl.prefix == NULL) &&                  if ((dl->decl.prefix == NULL) &&
                     ((ptr = find_type(dl->decl.type)) != NULL) &&                      ((ptr = find_type(dl->decl.type)) != NULL) &&
                     ((dl->decl.rel == REL_ALIAS) || (dl->decl.rel == REL_VECTOR))) {                      ((dl->decl.rel == REL_ALIAS) || (dl->decl.rel == REL_VECTOR))) {
   
                         if (dl->decl.rel == REL_ALIAS)                          if (dl->decl.rel == REL_ALIAS)
                                 size += ptr->length;                                  size += ptr->length;
                         else {                          else {
Line 459 
Line 446 
                 return;                  return;
         }          }
   
   
   
   
         flag = PUT;          flag = PUT;
         for (j = 0; j < 2; j++) {          for (j = 0; j < 2; j++) {
   
                 if (flag == PUT)                  if (flag == PUT)
                         f_print(fout, "\n\tif (xdrs->x_op == XDR_ENCODE) {\n");                          f_print(fout, "\n\tif (xdrs->x_op == XDR_ENCODE) {\n");
                 else                  else
                         f_print(fout, "\t\treturn (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;
                 size = 0;                  size = 0;
                 sizestr = NULL;                  sizestr = NULL;
Line 503 
Line 485 
                                         else {                                          else {
                                                 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();
                                                 }                                                  }
Line 514 
Line 495 
                                 }                                  }
   
                         } else {                          } else {
                                 if (i > 0)                                  if (i > 0) {
                                         if (sizestr == NULL && size < doinline) {                                          if (sizestr == NULL && size < doinline) {
                                                 /* don't expand into inline                                                  /* don't expand into inline
                                                  * code if size < doinline */                                                   * code if size < doinline */
Line 523 
Line 504 
                                                         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)
Line 559 
Line 537 
   
                                                 f_print(fout, "\t\t}\n");                                                  f_print(fout, "\t\t}\n");
                                         }                                          }
                                   }
                                 size = 0;                                  size = 0;
                                 i = 0;                                  i = 0;
                                 sizestr = NULL;                                  sizestr = NULL;
Line 566 
Line 545 
                         }                          }
   
                 }                  }
                 if (i > 0)                  if (i > 0) {
                         if (sizestr == NULL && size < doinline) {                          if (sizestr == NULL && size < doinline) {
                                 /* don't expand into inline code if size <                                  /* don't expand into inline code if size <
                                  * doinline */                                   * doinline */
Line 575 
Line 554 
                                         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)
Line 610 
Line 588 
   
                         }                          }
                 flag = GET;                  flag = GET;
                   }
         }          }
         f_print(fout, "\t\treturn (TRUE);\n\t}\n\n");          f_print(fout, "\t\treturn (TRUE);\n\t}\n\n");
   
Line 619 
Line 598 
                 print_stat(1, &dl->decl);                  print_stat(1, &dl->decl);
 }  }
   
 static  static void
 emit_typedef(def)  emit_typedef(def)
         definition *def;          definition *def;
 {  {
Line 628 
Line 607 
         char   *amax = def->def.ty.array_max;          char   *amax = def->def.ty.array_max;
         relation rel = def->def.ty.rel;          relation rel = def->def.ty.rel;
   
   
         print_ifstat(1, prefix, type, rel, amax, "objp", def->def_name);          print_ifstat(1, prefix, type, rel, amax, "objp", def->def_name);
 }  }
   
 static  static void
 print_stat(indent, dec)  print_stat(indent, dec)
         declaration *dec;          declaration *dec;
         int     indent;          int     indent;
Line 651 
Line 629 
         print_ifstat(indent, prefix, type, rel, amax, name, dec->name);          print_ifstat(indent, prefix, type, rel, amax, name, dec->name);
 }  }
   
   
 char   *upcase __P((char *));  char   *upcase __P((char *));
   
   void
 emit_inline(decl, flag)  emit_inline(decl, flag)
         declaration *decl;          declaration *decl;
         int     flag;          int     flag;
 {  {
           /*check whether an array or not */
   
 /*check whether an array or not */  
   
         switch (decl->rel) {          switch (decl->rel) {
         case REL_ALIAS:          case REL_ALIAS:
                 f_print(fout, "\t");                  f_print(fout, "\t");
Line 677 
Line 653 
         }          }
 }  }
   
   void
 emit_single_in_line(decl, flag, rel)  emit_single_in_line(decl, flag, rel)
         declaration *decl;          declaration *decl;
         int     flag;          int     flag;
Line 685 
Line 662 
         char   *upp_case;          char   *upp_case;
         int     freed = 0;          int     freed = 0;
   
   
   
         if (flag == PUT)          if (flag == PUT)
                 f_print(fout, "\t\tIXDR_PUT_");                  f_print(fout, "\t\tIXDR_PUT_");
         else          else
Line 718 
Line 693 
                 f_print(fout, "%s(buf);\n", upp_case);                  f_print(fout, "%s(buf);\n", upp_case);
         if (!freed)          if (!freed)
                 free(upp_case);                  free(upp_case);
   
 }  }
   
   
 char *  char *
 upcase(str)  upcase(str)
         char   *str;          char   *str;
 {  {
         char   *ptr, *hptr;          char   *ptr, *hptr;
   
   
         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");
Line 741 
Line 713 
   
         *ptr = '\0';          *ptr = '\0';
         return (hptr);          return (hptr);
   
 }  }

Legend:
Removed from v.1.7  
changed lines
  Added in v.1.8