[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.9 and 1.10

version 1.9, 2001/11/24 19:19:59 version 1.10, 2001/12/05 09:50:31
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", rname,                  f_print(fout, "\t\txdr_%s = (xdrproc_t) xdr_%s;\n",
             stringfix(typename) );                      rname, stringfix(typename));
   else          else
     f_print(fout, "\t\txdr_%s = xdr_%s;\n", rname, stringfix(typename) );                  f_print(fout, "\t\txdr_%s = xdr_%s;\n", rname,
 }                      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);
         sprintf(tmpbuf, "%s\t\t", sp);          snprintf(tmpbuf, sizeof 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 212 
Line 211 
   
         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 231 
Line 229 
 }  }
   
 /*  /*
  * write the rest of the service   * write the rest of the service
  */   */
 void  void
 write_rest()  write_rest()
Line 245 
Line 243 
                 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 264 
Line 262 
 write_programs(storage)  write_programs(storage)
         char *storage;          char *storage;
 {  {
         list *l;  
         definition *def;          definition *def;
           list *l;
   
         /* 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 298 
Line 292 
         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 334 
Line 328 
                         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 356 
Line 350 
   
         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 397 
Line 387 
                                 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", ARG, RESULT);                          f_print(fout, "\tbool_t (*xdr_%s)(), (*xdr_%s)();\n",
                     f_print(fout, "\tchar *(*%s)();\n", ROUTINE);                              ARG, RESULT);
                           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 423 
Line 412 
                 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 461 
Line 450 
                 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 497 
Line 486 
 }  }
   
 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 528 
Line 516 
         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 564 
Line 552 
 print_pmapunset(space)  print_pmapunset(space)
         char *space;          char *space;
 {  {
         list *l;  
         definition *def;  
         version_list *vp;          version_list *vp;
           definition *def;
           list *l;
   
         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 593 
Line 581 
 }  }
   
 /*  /*
  * 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 615 
Line 603 
 {  {
         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 725 
Line 713 
                 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 751 
Line 739 
         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 782 
Line 770 
         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 802 
Line 790 
 {  {
         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 814 
Line 802 
         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 830 
Line 818 
         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 854 
Line 842 
         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 938 
Line 923 
                         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.9  
changed lines
  Added in v.1.10