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

Diff for /src/usr.bin/rpcgen/rpc_svcout.c between version 1.8 and 1.9

version 1.8, 2001/11/24 19:17:47 version 1.9, 2001/11/24 19:19:59
Line 67 
Line 67 
 static open_log_file __P((char *, char *));  static open_log_file __P((char *, char *));
   
 static  static
 p_xdrfunc(rname, typename)  p_xdrfunc( rname, typename )
 char *rname;  char* rname;
 char *typename;  char* typename;
 {  {
         if (Cflag)    if( Cflag )
                 f_print(fout, "\t\txdr_%s = (xdrproc_t) xdr_%s;\n",      f_print(fout, "\t\txdr_%s = (xdrproc_t) xdr_%s;\n", rname,
                     rname, stringfix(typename));              stringfix(typename) );
         else    else
                 f_print(fout, "\t\txdr_%s = xdr_%s;\n", rname,      f_print(fout, "\t\txdr_%s = xdr_%s;\n", rname, stringfix(typename) );
                     stringfix(typename));  }
 }  
   
 void  void
 internal_proctype(plist)  internal_proctype(plist)
         proc_list *plist;          proc_list *plist;
 {  {
         f_print(fout, "static ");          f_print(fout, "static ");
         ptype(plist->res_prefix, plist->res_type, 1);          ptype( plist->res_prefix, plist->res_type, 1 );
         f_print(fout, "*");          f_print( fout, "*" );
 }  }
   
   
 /*  /*
  * write most of the service, that is, everything but the registrations.   * write most of the service, that is, everything but the registrations.
  */   */
 void  void
 write_most(infile, netflag, nomain)  write_most(infile, netflag, nomain)
         char *infile;           /* our name */          char *infile;           /* our name */
         int netflag;          int netflag;
         int nomain;          int nomain;
 {  {
         if (inetdflag || pmflag) {          if (inetdflag || pmflag) {
                 char *var_type;                  char* var_type;
                 var_type = (nomain? "extern" : "static");                  var_type = (nomain? "extern" : "static");
                 f_print(fout, "%s int _rpcpmstart;", var_type);                  f_print(fout, "%s int _rpcpmstart;", var_type );
                 f_print(fout, "\t\t/* Started by a port monitor ? */\n");                  f_print(fout, "\t\t/* Started by a port monitor ? */\n");
                 f_print(fout, "%s int _rpcfdtype;", var_type);                  f_print(fout, "%s int _rpcfdtype;", var_type );
                 f_print(fout, "\t\t/* Whether Stream or Datagram ? */\n");                  f_print(fout, "\t\t/* Whether Stream or Datagram ? */\n");
                 if (timerflag) {                  if (timerflag) {
                         f_print(fout, "%s int _rpcsvcdirty;", var_type);                          f_print(fout, "%s int _rpcsvcdirty;", var_type );
                         f_print(fout, "\t/* Still serving ? */\n");                          f_print(fout, "\t/* Still serving ? */\n");
                 }                  }
                 write_svc_aux(nomain);                  write_svc_aux( nomain );
         }          }
         /* write out dispatcher and stubs */          /* write out dispatcher and stubs */
         write_programs(nomain? (char *)NULL : "static");          write_programs( nomain? (char *)NULL : "static" );
   
         if (nomain)          if( nomain )
                 return;            return;
   
         f_print(fout, "\nmain()\n");          f_print(fout, "\nmain()\n");
         f_print(fout, "{\n");          f_print(fout, "{\n");
         if (inetdflag) {          if (inetdflag) {
                 write_inetmost(infile); /* Includes call to write_rpc_svc_fg() */                  write_inetmost(infile); /* Includes call to write_rpc_svc_fg() */
         } else {          } else {
           if (tirpcflag) {            if( tirpcflag ) {
                 if (netflag) {                  if (netflag) {
                         f_print(fout, "\tSVCXPRT *%s;\n", TRANSP);                          f_print(fout, "\tSVCXPRT *%s;\n", TRANSP);
                         f_print(fout, "\tstruct netconfig *nconf = NULL;\n");                          f_print(fout, "\tstruct netconfig *nconf = NULL;\n");
Line 146 
Line 146 
 }  }
   
 /*  /*
  * write a registration for the given transport   * write a registration for the given transport
  */   */
 void  void
 write_netid_register(transp)  write_netid_register(transp)
Line 163 
Line 163 
         f_print(fout, "%s\tnconf = getnetconfigent(\"%s\");\n", sp, transp);          f_print(fout, "%s\tnconf = getnetconfigent(\"%s\");\n", sp, transp);
         f_print(fout, "%s\tif (nconf == NULL) {\n", sp);          f_print(fout, "%s\tif (nconf == NULL) {\n", sp);
         (void) sprintf(_errbuf, "cannot find %s netid.", transp);          (void) sprintf(_errbuf, "cannot find %s netid.", transp);
         snprintf(tmpbuf, sizeof tmpbuf, "%s\t\t", sp);          sprintf(tmpbuf, "%s\t\t", sp);
         print_err_message(tmpbuf);          print_err_message(tmpbuf);
         f_print(fout, "%s\t\texit(1);\n", sp);          f_print(fout, "%s\t\texit(1);\n", sp);
         f_print(fout, "%s\t}\n", sp);          f_print(fout, "%s\t}\n", sp);
         f_print(fout, "%s\t%s = svc_tli_create(RPC_ANYFD, nconf, 0, 0, 0);\n",          f_print(fout, "%s\t%s = svc_tli_create(RPC_ANYFD, nconf, 0, 0, 0);\n",
             sp, TRANSP);                          sp, TRANSP);
         f_print(fout, "%s\tif (%s == NULL) {\n", sp, TRANSP);          f_print(fout, "%s\tif (%s == NULL) {\n", sp, TRANSP);
         (void) sprintf(_errbuf, "cannot create %s service.", transp);          (void) sprintf(_errbuf, "cannot create %s service.", transp);
         print_err_message(tmpbuf);          print_err_message(tmpbuf);
Line 177 
Line 177 
   
         for (l = defined; l != NULL; l = l->next) {          for (l = defined; l != NULL; l = l->next) {
                 def = (definition *) l->val;                  def = (definition *) l->val;
                 if (def->def_kind != DEF_PROGRAM)                  if (def->def_kind != DEF_PROGRAM) {
                         continue;                          continue;
                   }
                 for (vp = def->def.pr.versions; vp != NULL; vp = vp->next) {                  for (vp = def->def.pr.versions; vp != NULL; vp = vp->next) {
                         f_print(fout,                          f_print(fout,
                             "%s\t(void) rpcb_unset(%s, %s, nconf);\n",                                  "%s\t(void) rpcb_unset(%s, %s, nconf);\n",
                             sp, def->def_name, vp->vers_name);                                  sp, def->def_name, vp->vers_name);
                         f_print(fout,                          f_print(fout,
                             "%s\tif (!svc_reg(%s, %s, %s, ",                                  "%s\tif (!svc_reg(%s, %s, %s, ",
                             sp, TRANSP, def->def_name, vp->vers_name);                                  sp, TRANSP, def->def_name, vp->vers_name);
                         pvname(def->def_name, vp->vers_num);                          pvname(def->def_name, vp->vers_num);
                         f_print(fout, ", nconf)) {\n");                          f_print(fout, ", nconf)) {\n");
                         (void) sprintf(_errbuf, "unable to register (%s, %s, %s).",                          (void) sprintf(_errbuf, "unable to register (%s, %s, %s).",
                             def->def_name, vp->vers_name, transp);                                          def->def_name, vp->vers_name, transp);
                         print_err_message(tmpbuf);                          print_err_message(tmpbuf);
                         f_print(fout, "%s\t\texit(1);\n", sp);                          f_print(fout, "%s\t\texit(1);\n", sp);
                         f_print(fout, "%s\t}\n", sp);                          f_print(fout, "%s\t}\n", sp);
Line 211 
Line 212 
   
         for (l = defined; l != NULL; l = l->next) {          for (l = defined; l != NULL; l = l->next) {
                 def = (definition *) l->val;                  def = (definition *) l->val;
                 if (def->def_kind != DEF_PROGRAM)                  if (def->def_kind != DEF_PROGRAM) {
                         continue;                          continue;
                   }
                 for (vp = def->def.pr.versions; vp != NULL; vp = vp->next) {                  for (vp = def->def.pr.versions; vp != NULL; vp = vp->next) {
                         f_print(fout, "\tif (!svc_create(");                          f_print(fout, "\tif (!svc_create(");
                         pvname(def->def_name, vp->vers_num);                          pvname(def->def_name, vp->vers_num);
                         f_print(fout, ", %s, %s, \"%s\")) {\n",                          f_print(fout, ", %s, %s, \"%s\")) {\n",
                             def->def_name, vp->vers_name, transp);                                  def->def_name, vp->vers_name, transp);
                         (void) sprintf(_errbuf,                          (void) sprintf(_errbuf,
                             "unable to create (%s, %s) for %s.",                                  "unable to create (%s, %s) for %s.",
                             def->def_name, vp->vers_name, transp);                                          def->def_name, vp->vers_name, transp);
                         print_err_message("\t\t");                          print_err_message("\t\t");
                         f_print(fout, "\t\texit(1);\n");                          f_print(fout, "\t\texit(1);\n");
                         f_print(fout, "\t}\n");                          f_print(fout, "\t}\n");
Line 229 
Line 231 
 }  }
   
 /*  /*
  * write the rest of the service   * write the rest of the service
  */   */
 void  void
 write_rest()  write_rest()
Line 243 
Line 245 
                 f_print(fout, "\t}\n");                  f_print(fout, "\t}\n");
                 if (timerflag) {                  if (timerflag) {
                         f_print(fout, "\tif (_rpcpmstart) {\n");                          f_print(fout, "\tif (_rpcpmstart) {\n");
                         f_print(fout,                          f_print(fout,
                             "\t\t(void) signal(SIGALRM, %s closedown);\n",                                  "\t\t(void) signal(SIGALRM, %s closedown);\n",
                             Cflag? "(SIG_PF)" : "(void(*)())");                                  Cflag? "(SIG_PF)" : "(void(*)())" );
                         f_print(fout, "\t\t(void) alarm(_RPCSVC_CLOSEDOWN);\n");                          f_print(fout, "\t\t(void) alarm(_RPCSVC_CLOSEDOWN);\n");
                         f_print(fout, "\t}\n");                          f_print(fout, "\t}\n");
                 }                  }
Line 262 
Line 264 
 write_programs(storage)  write_programs(storage)
         char *storage;          char *storage;
 {  {
         definition *def;  
         list *l;          list *l;
           definition *def;
   
         /* write out stubs for procedure  definitions */          /* write out stubs for procedure  definitions */
         for (l = defined; l != NULL; l = l->next) {          for (l = defined; l != NULL; l = l->next) {
                 def = (definition *) l->val;                  def = (definition *) l->val;
                 if (def->def_kind == DEF_PROGRAM)                  if (def->def_kind == DEF_PROGRAM) {
                         write_real_program(def);                          write_real_program(def);
                   }
         }          }
   
         /* write out dispatcher for each program */          /* write out dispatcher for each program */
         for (l = defined; l != NULL; l = l->next) {          for (l = defined; l != NULL; l = l->next) {
                 def = (definition *) l->val;                  def = (definition *) l->val;
                 if (def->def_kind == DEF_PROGRAM)                  if (def->def_kind == DEF_PROGRAM) {
                         write_program(def, storage);                          write_program(def, storage);
                   }
         }          }
   
   
 }  }
   
 /* write out definition of internal function (e.g. _printmsg_1(...))  /* write out definition of internal function (e.g. _printmsg_1(...))
Line 292 
Line 298 
         proc_list *proc;          proc_list *proc;
         decl_list *l;          decl_list *l;
   
         if (!newstyle) return;  /* not needed for old style */          if( !newstyle ) return;  /* not needed for old style */
         for (vp = def->def.pr.versions; vp != NULL; vp = vp->next) {          for (vp = def->def.pr.versions; vp != NULL; vp = vp->next) {
                 for (proc = vp->procs; proc != NULL; proc = proc->next) {                  for (proc = vp->procs; proc != NULL; proc = proc->next) {
                         f_print(fout, "\n");                          f_print(fout, "\n");
                         internal_proctype(proc);                          internal_proctype(proc);
                         f_print(fout, "\n_");                          f_print(fout, "\n_");
                         pvname(proc->proc_name, vp->vers_num);                          pvname(proc->proc_name, vp->vers_num);
                         if (Cflag) {                          if( Cflag ) {
                           f_print(fout, "(");                            f_print(fout, "(" );
                           /* arg name */                            /* arg name */
                           if (proc->arg_num > 1)                            if (proc->arg_num > 1)
                             f_print(fout, proc->args.argname);                              f_print(fout, proc->args.argname);
                           else                            else
                             ptype(proc->args.decls->decl.prefix,                              ptype(proc->args.decls->decl.prefix,
                                   proc->args.decls->decl.type, 0);                                    proc->args.decls->decl.type, 0);
                           f_print(fout, " *argp, struct svc_req *%s)\n",                            f_print(fout, " *argp, struct svc_req *%s)\n",
                                   RQSTP);                                    RQSTP);
                         } else {                          } else {
                           f_print(fout, "(argp, %s)\n", RQSTP);                            f_print(fout, "(argp, %s)\n", RQSTP );
                           /* arg name */                            /* arg name */
                           if (proc->arg_num > 1)                            if (proc->arg_num > 1)
                             f_print(fout, "\t%s *argp;\n", proc->args.argname);                              f_print(fout, "\t%s *argp;\n", proc->args.argname);
                           else {                            else {
                             f_print(fout, "\t");                              f_print(fout, "\t");
                             ptype(proc->args.decls->decl.prefix,                              ptype(proc->args.decls->decl.prefix,
                                   proc->args.decls->decl.type, 0);                                    proc->args.decls->decl.type, 0);
                             f_print(fout, " *argp;\n");                              f_print(fout, " *argp;\n");
                           }                            }
Line 328 
Line 334 
                         pvname_svc(proc->proc_name, vp->vers_num);                          pvname_svc(proc->proc_name, vp->vers_num);
                         f_print(fout, "(");                          f_print(fout, "(");
                         if (proc->arg_num < 2) { /* single argument */                          if (proc->arg_num < 2) { /* single argument */
                           if (!streq(proc->args.decls->decl.type, "void"))                            if (!streq( proc->args.decls->decl.type, "void"))
                             f_print(fout, "*argp, ");  /* non-void */                              f_print(fout, "*argp, ");  /* non-void */
                         } else {                          } else {
                           for (l = proc->args.decls;  l != NULL; l = l->next)                            for (l = proc->args.decls;  l != NULL; l = l->next)
                             f_print(fout, "argp->%s, ", l->decl.name);                              f_print(fout, "argp->%s, ", l->decl.name);
                         }                          }
                         f_print(fout, "%s));\n}\n", RQSTP);                          f_print(fout, "%s));\n}\n", RQSTP);
                 }                  }
         }          }
 }  }
   
 static  static
 write_program(def, storage)  write_program(def, storage)
         definition *def;          definition *def;
         char *storage;          char *storage;
Line 350 
Line 356 
   
         for (vp = def->def.pr.versions; vp != NULL; vp = vp->next) {          for (vp = def->def.pr.versions; vp != NULL; vp = vp->next) {
                 f_print(fout, "\n");                  f_print(fout, "\n");
                 if (storage != NULL)                  if (storage != NULL) {
                         f_print(fout, "%s ", storage);                          f_print(fout, "%s ", storage);
                   }
                 f_print(fout, "void\n");                  f_print(fout, "void\n");
                 pvname(def->def_name, vp->vers_num);                  pvname(def->def_name, vp->vers_num);
   
                 if (Cflag) {                  if (Cflag) {
                         f_print(fout, "(struct svc_req *%s, ", RQSTP);                     f_print(fout, "(struct svc_req *%s, ", RQSTP);
                         f_print(fout, "register SVCXPRT *%s)\n", TRANSP);                     f_print(fout, "register SVCXPRT *%s)\n", TRANSP);
                 } else {                  } else {
                         f_print(fout, "(%s, %s)\n", RQSTP, TRANSP);                     f_print(fout, "(%s, %s)\n", RQSTP, TRANSP);
                         f_print(fout, " struct svc_req *%s;\n", RQSTP);                     f_print(fout, "      struct svc_req *%s;\n", RQSTP);
                         f_print(fout, " register SVCXPRT *%s;\n", TRANSP);                     f_print(fout, "      register SVCXPRT *%s;\n", TRANSP);
                 }                  }
   
                 f_print(fout, "{\n");                  f_print(fout, "{\n");
   
                 filled = 0;                  filled = 0;
                 f_print(fout, "\tunion {\n");                  f_print(fout, "\tunion {\n");
                 for (proc = vp->procs; proc != NULL; proc = proc->next) {                  for (proc = vp->procs; proc != NULL; proc = proc->next) {
                         if (proc->arg_num < 2) { /* single argument */                          if (proc->arg_num < 2) { /* single argument */
                                 if (streq(proc->args.decls->decl.type,                                  if (streq(proc->args.decls->decl.type,
                                     "void"))                                            "void")) {
                                         continue;                                          continue;
                                   }
                                 filled = 1;                                  filled = 1;
                                 f_print(fout, "\t\t");                                  f_print(fout, "\t\t");
                                 ptype(proc->args.decls->decl.prefix,                                  ptype(proc->args.decls->decl.prefix,
                                     proc->args.decls->decl.type, 0);                                        proc->args.decls->decl.type, 0);
                                 pvname(proc->proc_name, vp->vers_num);                                  pvname(proc->proc_name, vp->vers_num);
                                 f_print(fout, "_arg;\n");                                  f_print(fout, "_arg;\n");
   
                         } else {                          }
                           else {
                                 filled = 1;                                  filled = 1;
                                 f_print(fout, "\t\t%s", proc->args.argname);                                  f_print(fout, "\t\t%s", proc->args.argname);
                                 f_print(fout, " ");                                  f_print(fout, " ");
Line 387 
Line 397 
                                 f_print(fout, "_arg;\n");                                  f_print(fout, "_arg;\n");
                         }                          }
                 }                  }
                 if (!filled)                  if (!filled) {
                         f_print(fout, "\t\tint fill;\n");                          f_print(fout, "\t\tint fill;\n");
                   }
                 f_print(fout, "\t} %s;\n", ARG);                  f_print(fout, "\t} %s;\n", ARG);
                 f_print(fout, "\tchar *%s;\n", RESULT);                  f_print(fout, "\tchar *%s;\n", RESULT);
   
                 if (Cflag) {                  if (Cflag) {
                         f_print(fout, "\txdrproc_t xdr_%s, xdr_%s;\n", ARG, RESULT);                      f_print(fout, "\txdrproc_t xdr_%s, xdr_%s;\n", ARG, RESULT);
                         f_print(fout,                      f_print(fout,
                             "\tchar *(*%s)(char *, struct svc_req *);\n",                              "\tchar *(*%s)(char *, struct svc_req *);\n",
                             ROUTINE);                              ROUTINE);
                 } else {                  } else {
                         f_print(fout, "\tbool_t (*xdr_%s)(), (*xdr_%s)();\n",                      f_print(fout, "\tbool_t (*xdr_%s)(), (*xdr_%s)();\n", ARG, RESULT);
                             ARG, RESULT);                      f_print(fout, "\tchar *(*%s)();\n", ROUTINE);
                         f_print(fout, "\tchar *(*%s)();\n", ROUTINE);  
                 }                  }
   
                 f_print(fout, "\n");                  f_print(fout, "\n");
   
                 if (callerflag)                  if (callerflag)
                         f_print(fout, "\tcaller = transp;\n"); /*EVAS*/                          f_print(fout, "\tcaller = transp;\n"); /*EVAS*/
                 if (timerflag)                  if (timerflag)
                         f_print(fout, "\t_rpcsvcdirty = 1;\n");                          f_print(fout, "\t_rpcsvcdirty = 1;\n");
Line 412 
Line 423 
                 if (!nullproc(vp->procs)) {                  if (!nullproc(vp->procs)) {
                         f_print(fout, "\tcase NULLPROC:\n");                          f_print(fout, "\tcase NULLPROC:\n");
                         f_print(fout,                          f_print(fout,
                             Cflag                          Cflag
                             ? "\t\t(void) svc_sendreply(%s, (xdrproc_t) xdr_void, (char *)NULL);\n"                          ? "\t\t(void) svc_sendreply(%s, (xdrproc_t) xdr_void, (char *)NULL);\n"
                             : "\t\t(void) svc_sendreply(%s, xdr_void, (char *)NULL);\n",                          : "\t\t(void) svc_sendreply(%s, xdr_void, (char *)NULL);\n",
                             TRANSP);                                          TRANSP);
                         print_return("\t\t");                          print_return("\t\t");
                         f_print(fout, "\n");                          f_print(fout, "\n");
                 }                  }
                 for (proc = vp->procs; proc != NULL; proc = proc->next) {                  for (proc = vp->procs; proc != NULL; proc = proc->next) {
                         f_print(fout, "\tcase %s:\n", proc->proc_name);                          f_print(fout, "\tcase %s:\n", proc->proc_name);
                         if (proc->arg_num < 2) { /* single argument */                          if (proc->arg_num < 2) { /* single argument */
                                 p_xdrfunc(ARG, proc->args.decls->decl.type);                            p_xdrfunc( ARG, proc->args.decls->decl.type);
                         } else {                          } else {
                                 p_xdrfunc(ARG, proc->args.argname);                            p_xdrfunc( ARG, proc->args.argname);
                         }                          }
                         p_xdrfunc(RESULT, proc->res_type);                          p_xdrfunc( RESULT, proc->res_type);
                         if (Cflag)                          if( Cflag )
                                 f_print(fout,                              f_print(fout,
                                     "\t\t%s = (char *(*)(char *, struct svc_req *)) ",                                      "\t\t%s = (char *(*)(char *, struct svc_req *)) ",
                                     ROUTINE);                                      ROUTINE);
                         else                          else
                                 f_print(fout, "\t\t%s = (char *(*)()) ", ROUTINE);                              f_print(fout, "\t\t%s = (char *(*)()) ", ROUTINE);
   
                         if (newstyle) { /* new style: calls internal routine */                          if (newstyle) { /* new style: calls internal routine */
                                 f_print(fout,"_");                                  f_print(fout,"_");
                         }                          }
                         if (!newstyle)                          if (!newstyle )
                                 pvname_svc(proc->proc_name, vp->vers_num);                            pvname_svc(proc->proc_name, vp->vers_num);
                         else                          else
                                 pvname(proc->proc_name, vp->vers_num);                            pvname(proc->proc_name, vp->vers_num);
                         f_print(fout, ";\n");                          f_print(fout, ";\n");
                         f_print(fout, "\t\tbreak;\n\n");                          f_print(fout, "\t\tbreak;\n\n");
                 }                  }
Line 450 
Line 461 
                 f_print(fout, "\t}\n");                  f_print(fout, "\t}\n");
   
                 f_print(fout, "\t(void) memset((char *)&%s, 0, sizeof (%s));\n", ARG, ARG);                  f_print(fout, "\t(void) memset((char *)&%s, 0, sizeof (%s));\n", ARG, ARG);
                 printif ("getargs", TRANSP, "(caddr_t) &", ARG);                  printif("getargs", TRANSP, "(caddr_t) &", ARG);
                 printerr("decode", TRANSP);                  printerr("decode", TRANSP);
                 print_return("\t\t");                  print_return("\t\t");
                 f_print(fout, "\t}\n");                  f_print(fout, "\t}\n");
   
                 if (Cflag)                  if (Cflag)
                         f_print(fout, "\t%s = (*%s)((char *)&%s, %s);\n",                      f_print(fout, "\t%s = (*%s)((char *)&%s, %s);\n",
                             RESULT, ROUTINE, ARG, RQSTP);                              RESULT, ROUTINE, ARG, RQSTP);
                 else                  else
                         f_print(fout, "\t%s = (*%s)(&%s, %s);\n",                      f_print(fout, "\t%s = (*%s)(&%s, %s);\n",
                             RESULT, ROUTINE, ARG, RQSTP);                              RESULT, ROUTINE, ARG, RQSTP);
                 f_print(fout,                  f_print(fout,
                     "\tif (%s != NULL && !svc_sendreply(%s, xdr_%s, %s)) {\n",                          "\tif (%s != NULL && !svc_sendreply(%s, xdr_%s, %s)) {\n",
                     RESULT, TRANSP, RESULT, RESULT);                          RESULT, TRANSP, RESULT, RESULT);
                 printerr("systemerr", TRANSP);                  printerr("systemerr", TRANSP);
                 f_print(fout, "\t}\n");                  f_print(fout, "\t}\n");
   
                 printif ("freeargs", TRANSP, "(caddr_t) &", ARG);                  printif("freeargs", TRANSP, "(caddr_t) &", ARG);
                 (void) sprintf(_errbuf, "unable to free arguments");                  (void) sprintf(_errbuf, "unable to free arguments");
                 print_err_message("\t\t");                  print_err_message("\t\t");
                 f_print(fout, "\t\texit(1);\n");                  f_print(fout, "\t\texit(1);\n");
Line 486 
Line 497 
 }  }
   
 static  static
 printif (proc, transp, prefix, arg)  printif(proc, transp, prefix, arg)
         char *proc;          char *proc;
         char *transp;          char *transp;
         char *prefix;          char *prefix;
         char *arg;          char *arg;
 {  {
         f_print(fout, "\tif (!svc_%s(%s, xdr_%s, %s%s)) {\n",          f_print(fout, "\tif (!svc_%s(%s, xdr_%s, %s%s)) {\n",
             proc, transp, arg, prefix, arg);                  proc, transp, arg, prefix, arg);
 }  }
   
 nullproc(proc)  nullproc(proc)
         proc_list *proc;          proc_list *proc;
 {  {
         for (; proc != NULL; proc = proc->next) {          for (; proc != NULL; proc = proc->next) {
                 if (streq(proc->proc_num, "0"))                  if (streq(proc->proc_num, "0")) {
                         return (1);                          return (1);
                   }
         }          }
         return (0);          return (0);
 }  }
Line 516 
Line 528 
         f_print(fout, "\tstruct sockaddr_in saddr;\n");          f_print(fout, "\tstruct sockaddr_in saddr;\n");
         f_print(fout, "\tint asize = sizeof (saddr);\n");          f_print(fout, "\tint asize = sizeof (saddr);\n");
         f_print(fout, "\n");          f_print(fout, "\n");
         f_print(fout,          f_print(fout,
         "\tif (getsockname(0, (struct sockaddr *)&saddr, &asize) == 0) {\n");          "\tif (getsockname(0, (struct sockaddr *)&saddr, &asize) == 0) {\n");
         f_print(fout, "\t\tint ssize = sizeof (int);\n\n");          f_print(fout, "\t\tint ssize = sizeof (int);\n\n");
         f_print(fout, "\t\tif (saddr.sin_family != AF_INET)\n");          f_print(fout, "\t\tif (saddr.sin_family != AF_INET)\n");
Line 552 
Line 564 
 print_pmapunset(space)  print_pmapunset(space)
         char *space;          char *space;
 {  {
         version_list *vp;  
         definition *def;  
         list *l;          list *l;
           definition *def;
           version_list *vp;
   
         for (l = defined; l != NULL; l = l->next) {          for (l = defined; l != NULL; l = l->next) {
                 def = (definition *) l->val;                  def = (definition *) l->val;
                 if (def->def_kind == DEF_PROGRAM) {                  if (def->def_kind == DEF_PROGRAM) {
                         for (vp = def->def.pr.versions; vp != NULL;                          for (vp = def->def.pr.versions; vp != NULL;
                             vp = vp->next) {                                          vp = vp->next) {
                                 f_print(fout, "%s(void) pmap_unset(%s, %s);\n",                                  f_print(fout, "%s(void) pmap_unset(%s, %s);\n",
                                     space, def->def_name, vp->vers_name);                                          space, def->def_name, vp->vers_name);
                         }                          }
                 }                  }
         }          }
Line 581 
Line 593 
 }  }
   
 /*  /*
  * Write the server auxiliary function (_msgout, timeout)   * Write the server auxiliary function ( _msgout, timeout)
  */   */
 void  void
 write_svc_aux(nomain)  write_svc_aux( nomain )
      int nomain;       int nomain;
 {  {
         if (!logflag)          if (!logflag)
                 write_msg_out();                  write_msg_out();
         if (!nomain)          if( !nomain )
                 write_timeout_func();            write_timeout_func();
         if (callerflag)                 /*EVAS*/          if (callerflag)                 /*EVAS*/
                 write_caller_func();    /*EVAS*/                  write_caller_func();    /*EVAS*/
 }  }
Line 603 
Line 615 
 {  {
         f_print(fout, "\n");          f_print(fout, "\n");
         f_print(fout, "static\n");          f_print(fout, "static\n");
         if (!Cflag) {          if( !Cflag ) {
                 f_print(fout, "void _msgout(msg)\n");            f_print(fout, "void _msgout(msg)\n");
                 f_print(fout, "\tchar *msg;\n");            f_print(fout, "\tchar *msg;\n");
         } else {          } else {
                 f_print(fout, "void _msgout(char *msg)\n");            f_print(fout, "void _msgout(char* msg)\n");
         }          }
         f_print(fout, "{\n");          f_print(fout, "{\n");
         f_print(fout, "#ifdef RPC_SVC_FG\n");          f_print(fout, "#ifdef RPC_SVC_FG\n");
Line 713 
Line 725 
                 f_print(fout, "\t\tstruct netconfig *nconf = NULL;\n");                  f_print(fout, "\t\tstruct netconfig *nconf = NULL;\n");
                 f_print(fout, "\t\tSVCXPRT *%s;\n", TRANSP);                  f_print(fout, "\t\tSVCXPRT *%s;\n", TRANSP);
         }          }
         if (timerflag)          if( timerflag )
           f_print(fout, "\t\tint pmclose;\n");            f_print(fout, "\t\tint pmclose;\n");
 /* not necessary, defined in /usr/include/stdlib */  /* not necessary, defined in /usr/include/stdlib */
 /*      f_print(fout, "\t\textern char *getenv();\n");*/  /*      f_print(fout, "\t\textern char *getenv();\n");*/
Line 739 
Line 751 
         f_print(fout, "\t\t\t\texit(1);\n");          f_print(fout, "\t\t\t\texit(1);\n");
         f_print(fout, "\t\t\t}\n");          f_print(fout, "\t\t\t}\n");
         f_print(fout, "\t\t}\n");          f_print(fout, "\t\t}\n");
         if (timerflag)          if( timerflag )
           f_print(fout, "\t\tpmclose = (t_getstate(0) != T_DATAXFER);\n");            f_print(fout, "\t\tpmclose = (t_getstate(0) != T_DATAXFER);\n");
         f_print(fout, "\t\tif ((%s = svc_tli_create(0, nconf, NULL, 0, 0)) == NULL) {\n",          f_print(fout, "\t\tif ((%s = svc_tli_create(0, nconf, NULL, 0, 0)) == NULL) {\n",
                         TRANSP);                          TRANSP);
Line 770 
Line 782 
         if (timerflag) {          if (timerflag) {
                 f_print(fout, "\t\tif (pmclose) {\n");                  f_print(fout, "\t\tif (pmclose) {\n");
                 f_print(fout, "\t\t\t(void) signal(SIGALRM, %s closedown);\n",                  f_print(fout, "\t\t\t(void) signal(SIGALRM, %s closedown);\n",
                                 Cflag? "(SIG_PF)" : "(void(*)())");                                  Cflag? "(SIG_PF)" : "(void(*)())" );
                 f_print(fout, "\t\t\t(void) alarm(_RPCSVC_CLOSEDOWN);\n");                  f_print(fout, "\t\t\t(void) alarm(_RPCSVC_CLOSEDOWN);\n");
                 f_print(fout, "\t\t}\n");                  f_print(fout, "\t\t}\n");
         }          }
Line 790 
Line 802 
 {  {
         f_print(fout, "#ifndef RPC_SVC_FG\n");          f_print(fout, "#ifndef RPC_SVC_FG\n");
         f_print(fout, "%sint size;\n", sp);          f_print(fout, "%sint size;\n", sp);
         if (tirpcflag)          if( tirpcflag )
                 f_print(fout, "%sstruct rlimit rl;\n", sp);                  f_print(fout, "%sstruct rlimit rl;\n", sp);
         if (inetdflag)          if (inetdflag)
                 f_print(fout, "%sint pid, i;\n\n", sp);                  f_print(fout, "%sint pid, i;\n\n", sp);
Line 802 
Line 814 
         f_print(fout, "%sif (pid)\n", sp);          f_print(fout, "%sif (pid)\n", sp);
         f_print(fout, "%s\texit(0);\n", sp);          f_print(fout, "%s\texit(0);\n", sp);
         /* get number of file descriptors */          /* get number of file descriptors */
         if (tirpcflag) {          if( tirpcflag ) {
           f_print(fout, "%srl.rlim_max = 0;\n", sp);            f_print(fout, "%srl.rlim_max = 0;\n", sp);
           f_print(fout, "%sgetrlimit(RLIMIT_NOFILE, &rl);\n", sp);            f_print(fout, "%sgetrlimit(RLIMIT_NOFILE, &rl);\n", sp);
           f_print(fout, "%sif ((size = rl.rlim_max) == 0)\n", sp);            f_print(fout, "%sif ((size = rl.rlim_max) == 0)\n", sp);
Line 818 
Line 830 
         f_print(fout, "%s(void) dup2(i, 1);\n", sp);          f_print(fout, "%s(void) dup2(i, 1);\n", sp);
         f_print(fout, "%s(void) dup2(i, 2);\n", sp);          f_print(fout, "%s(void) dup2(i, 2);\n", sp);
         /* This removes control of the controlling terminal */          /* This removes control of the controlling terminal */
         if (tirpcflag)          if( tirpcflag )
           f_print(fout, "%ssetsid();\n", sp);            f_print(fout, "%ssetsid();\n", sp);
         else {          else {
           f_print(fout, "%si = open(\"/dev/tty\", 2);\n", sp);            f_print(fout, "%si = open(\"/dev/tty\", 2);\n", sp);
Line 842 
Line 854 
         char *s;          char *s;
   
         s = strrchr(infile, '.');          s = strrchr(infile, '.');
         if (s)          if (s)
                 *s = '\0';                  *s = '\0';
         f_print(fout,"%sopenlog(\"%s\", LOG_PID, LOG_DAEMON);\n", sp, infile);          f_print(fout,"%sopenlog(\"%s\", LOG_PID, LOG_DAEMON);\n", sp, infile);
         if (s)          if (s)
                 *s = '.';                  *s = '.';
 }  }
   
   
   
   
 /*  /*
  * write a registration for the given transport for Inetd   * write a registration for the given transport for Inetd
  */   */
Line 923 
Line 938 
                         pvname(def->def_name, vp->vers_num);                          pvname(def->def_name, vp->vers_num);
                         if (inetdflag)                          if (inetdflag)
                                 f_print(fout, ", proto)) {\n");                                  f_print(fout, ", proto)) {\n");
                         else                          else
                                 f_print(fout, ", IPPROTO_%s)) {\n",                                  f_print(fout, ", IPPROTO_%s)) {\n",
                                         isudp ? "UDP": "TCP");                                          isudp ? "UDP": "TCP");
                         (void) sprintf(_errbuf, "unable to register (%s, %s, %s).",                          (void) sprintf(_errbuf, "unable to register (%s, %s, %s).",

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