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

Diff for /src/usr.bin/cvs/cvs.c between version 1.144 and 1.145

version 1.144, 2008/03/08 20:52:36 version 1.145, 2008/05/28 17:12:00
Line 124 
Line 124 
 }  }
   
 int  int
   cvs_build_cmd(char ***cmd_argv, char **argv, int argc)
   {
           int cmd_argc, i, cur;
           char *cp, *linebuf, *lp;
   
           if (cmdp->cmd_defargs == NULL) {
                   *cmd_argv = argv;
                   return argc;
           }
   
           cur = argc + 2;
           cmd_argc = 0;
           *cmd_argv = xcalloc(cur, sizeof(char *));
           (*cmd_argv)[cmd_argc++] = argv[0];
   
           linebuf = xstrdup(cmdp->cmd_defargs);
           for (lp = linebuf; lp != NULL;) {
                   cp = strsep(&lp, " \t\b\f\n\r\t\v");
                   if (cp == NULL)
                           break;
                   if (*cp == '\0')
                           continue;
   
                   if (cmd_argc == cur) {
                           cur += 8;
                           *cmd_argv = xrealloc(*cmd_argv, cur,
                               sizeof(char *));
                   }
   
                   (*cmd_argv)[cmd_argc++] = cp;
           }
   
           if (cmd_argc + argc > cur) {
                   cur = cmd_argc + argc + 1;
                   *cmd_argv = xrealloc(*cmd_argv, cur,
                       sizeof(char *));
           }
   
           for (i = 1; i < argc; i++)
                   (*cmd_argv)[cmd_argc++] = argv[i];
   
           (*cmd_argv)[cmd_argc] = NULL;
   
           return cmd_argc;
   }
   
   int
 main(int argc, char **argv)  main(int argc, char **argv)
 {  {
         char *envstr, *cmd_argv[CVS_CMD_MAXARG], **targv;          char *envstr, **cmd_argv, **targv;
         int i, ret, cmd_argc;          int i, ret, cmd_argc;
         struct passwd *pw;          struct passwd *pw;
         struct stat st;          struct stat st;
Line 214 
Line 261 
   
         cvs_cmdop = cmdp->cmd_op;          cvs_cmdop = cmdp->cmd_op;
   
         cmd_argc = 0;          cmd_argc = cvs_build_cmd(&cmd_argv, argv, argc);
         memset(cmd_argv, 0, sizeof(cmd_argv));  
   
         cmd_argv[cmd_argc++] = argv[0];  
         if (cmdp->cmd_defargs != NULL) {  
                 /* transform into a new argument vector */  
                 ret = cvs_getargv(cmdp->cmd_defargs, cmd_argv + 1,  
                     CVS_CMD_MAXARG - 1);  
                 if (ret < 0)  
                         fatal("main: cvs_getargv failed");  
   
                 cmd_argc += ret;  
         }  
   
         if (argc + cmd_argc >= CVS_CMD_MAXARG)  
                 fatal("main: too many arguments for `%s'", cmd_argv[0]);  
         for (ret = 1; ret < argc; ret++)  
                 cmd_argv[cmd_argc++] = argv[ret];  
   
         cvs_file_init();          cvs_file_init();
   

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