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

Diff for /src/usr.bin/rcs/rcsprog.c between version 1.143 and 1.144

version 1.143, 2008/04/26 19:58:03 version 1.144, 2008/05/10 19:54:58
Line 34 
Line 34 
   
 #include "rcsprog.h"  #include "rcsprog.h"
   
 #define RCS_CMD_MAXARG  128  
 #define RCSPROG_OPTSTRING       "A:a:b::c:e::ik:Ll::m:Mn:N:o:qt::TUu::Vx::z::"  #define RCSPROG_OPTSTRING       "A:a:b::c:e::ik:Ll::m:Mn:N:o:qt::TUu::Vx::z::"
   
 const char rcs_version[] = "OpenRCS 4.3";  const char rcs_version[] = "OpenRCS 4.3";
Line 75 
Line 74 
 }  }
   
 int  int
 rcs_init(char *envstr, char **argv, int argvlen)  build_cmd(char ***cmd_argv, char **argv, int argc)
 {  {
         int argc, error;          int cmd_argc, i, cur;
         char *linebuf, *lp, *cp;          char *cp, *rcsinit, *linebuf, *lp;
   
         linebuf = xstrdup(envstr);          if ((rcsinit = getenv("RCSINIT")) == NULL) {
         (void)memset(argv, 0, argvlen * sizeof(char *));                  *cmd_argv = argv;
                   return argc;
           }
   
         error = argc = 0;          cur = argc + 2;
           cmd_argc = 0;
           *cmd_argv = xcalloc(cur, sizeof(char *));
           (*cmd_argv)[cmd_argc++] = argv[0];
   
           linebuf = xstrdup(rcsinit);
         for (lp = linebuf; lp != NULL;) {          for (lp = linebuf; lp != NULL;) {
                 cp = strsep(&lp, " \t\b\f\n\r\t\v");                  cp = strsep(&lp, " \t\b\f\n\r\t\v");
                 if (cp == NULL)                  if (cp == NULL)
                         break;                          break;
                 else if (*cp == '\0')                  if (*cp == '\0')
                         continue;                          continue;
   
                 if (argc == argvlen) {                  if (cmd_argc == cur) {
                         error++;                          cur += 8;
                         break;                          *cmd_argv = xrealloc(*cmd_argv, cur,
                               sizeof(char *));
                 }                  }
   
                 argv[argc] = cp;                  (*cmd_argv)[cmd_argc++] = cp;
                 argc++;  
         }          }
   
         if (error != 0) {          if (cmd_argc + argc > cur) {
                 xfree(linebuf);                  cur = cmd_argc + argc + 1;
                 argc = -1;                  *cmd_argv = xrealloc(*cmd_argv, cur,
                       sizeof(char *));
         }          }
   
         return (argc);          for (i = 1; i < argc; i++)
                   (*cmd_argv)[cmd_argc++] = argv[i];
   
           (*cmd_argv)[cmd_argc] = NULL;
   
           return cmd_argc;
 }  }
   
 int  int
 main(int argc, char **argv)  main(int argc, char **argv)
 {  {
         u_int i;          u_int i;
         char *rcsinit, *cmd_argv[RCS_CMD_MAXARG];          char **cmd_argv;
         int ret, cmd_argc;          int ret, cmd_argc;
   
         ret = -1;          ret = -1;
         rcs_optind = 1;          rcs_optind = 1;
         SLIST_INIT(&rcs_temp_files);          SLIST_INIT(&rcs_temp_files);
   
         cmd_argc = 0;          cmd_argc = build_cmd(&cmd_argv, argv, argc);
         cmd_argv[cmd_argc++] = argv[0];  
         if ((rcsinit = getenv("RCSINIT")) != NULL) {  
                 ret = rcs_init(rcsinit, cmd_argv + 1,  
                     RCS_CMD_MAXARG - 1);  
                 if (ret < 0)  
                         errx(1, "failed to prepend RCSINIT options");  
   
                 cmd_argc += ret;  
         }  
   
         if ((rcs_tmpdir = getenv("TMPDIR")) == NULL)          if ((rcs_tmpdir = getenv("TMPDIR")) == NULL)
                 rcs_tmpdir = RCS_TMPDIR_DEFAULT;                  rcs_tmpdir = RCS_TMPDIR_DEFAULT;
   
         if (argc + cmd_argc >= RCS_CMD_MAXARG)  
                 errx(1, "too many arguments");  
         for (ret = 1; ret < argc; ret++)  
                 cmd_argv[cmd_argc++] = argv[ret];  
   
         signal(SIGHUP, sighdlr);          signal(SIGHUP, sighdlr);
         signal(SIGINT, sighdlr);          signal(SIGINT, sighdlr);

Legend:
Removed from v.1.143  
changed lines
  Added in v.1.144