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

Diff for /src/usr.bin/cvs/util.c between version 1.117 and 1.118

version 1.117, 2007/09/19 11:53:27 version 1.118, 2007/09/19 12:04:38
Line 228 
Line 228 
 {  {
         u_int i;          u_int i;
         int argc, error;          int argc, error;
         char qbuf[128], *linebuf, *lp, *cp, *arg;          char *linebuf, *lp, *cp;
   
         linebuf = xstrdup(line);          linebuf = xstrdup(line);
   
Line 238 
Line 238 
         /* build the argument vector */          /* build the argument vector */
         error = 0;          error = 0;
         for (lp = linebuf; lp != NULL;) {          for (lp = linebuf; lp != NULL;) {
                 if (*lp == '"') {                  cp = strsep(&lp, " \t");
                         /* double-quoted string */                  if (cp == NULL)
                         lp++;                          break;
                         i = 0;                  else if (*cp == '\0')
                         memset(qbuf, 0, sizeof(qbuf));                          continue;
                         while (*lp != '"') {  
                                 if (*lp == '\\')  
                                         lp++;  
                                 if (*lp == '\0') {  
                                         cvs_log(LP_ERR, "no terminating quote");  
                                         error++;  
                                         break;  
                                 }  
   
                                 qbuf[i++] = *lp++;  
                                 if (i == sizeof(qbuf) - 1) {  
                                         error++;  
                                         break;  
                                 }  
                         }  
                         if (error)  
                                 break;  
                         lp++;  
   
                         arg = qbuf;  
                 } else {  
                         cp = strsep(&lp, " \t");  
                         if (cp == NULL)  
                                 break;  
                         else if (*cp == '\0')  
                                 continue;  
   
                         arg = cp;  
                 }  
   
                 if (argc == argvlen) {                  if (argc == argvlen) {
                         error++;                          error++;
                         break;                          break;
                 }                  }
   
                 argv[argc] = xstrdup(arg);                  argv[argc] = xstrdup(cp);
                 argc++;                  argc++;
         }          }
   

Legend:
Removed from v.1.117  
changed lines
  Added in v.1.118