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

Diff for /src/usr.bin/cvs/rcs.c between version 1.192 and 1.193

version 1.192, 2006/12/21 15:03:15 version 1.193, 2007/01/11 17:44:18
Line 493 
Line 493 
                 fputs("@\ntext\n@", fp);                  fputs("@\ntext\n@", fp);
                 if (rdp->rd_text != NULL) {                  if (rdp->rd_text != NULL) {
                         rcs_strprint(rdp->rd_text, rdp->rd_tlen, fp);                          rcs_strprint(rdp->rd_text, rdp->rd_tlen, fp);
   
                         if (rdp->rd_tlen != 0) {  
                                 if (rdp->rd_text[rdp->rd_tlen-1] != '\n')  
                                         fputc('\n', fp);  
                         }  
                 }                  }
                 fputs("@\n", fp);                  fputs("@\n", fp);
         }          }
Line 1078 
Line 1073 
         char op, *ep;          char op, *ep;
         struct cvs_line *lp, *dlp, *ndlp;          struct cvs_line *lp, *dlp, *ndlp;
         int i, lineno, nbln;          int i, lineno, nbln;
           u_char tmp;
   
         dlp = TAILQ_FIRST(&(dlines->l_lines));          dlp = TAILQ_FIRST(&(dlines->l_lines));
         lp = TAILQ_FIRST(&(plines->l_lines));          lp = TAILQ_FIRST(&(plines->l_lines));
Line 1085 
Line 1081 
         /* skip first bogus line */          /* skip first bogus line */
         for (lp = TAILQ_NEXT(lp, l_list); lp != NULL;          for (lp = TAILQ_NEXT(lp, l_list); lp != NULL;
             lp = TAILQ_NEXT(lp, l_list)) {              lp = TAILQ_NEXT(lp, l_list)) {
                   if (lp->l_len < 2)
                           fatal("line too short, RCS patch seems broken");
                 op = *(lp->l_line);                  op = *(lp->l_line);
                   /* NUL-terminate line buffer for strtol() safety. */
                   tmp = lp->l_line[lp->l_len - 1];
                   lp->l_line[lp->l_len - 1] = '\0';
                 lineno = (int)strtol((lp->l_line + 1), &ep, 10);                  lineno = (int)strtol((lp->l_line + 1), &ep, 10);
                 if (lineno > dlines->l_nblines || lineno < 0 ||                  if (lineno - 1 > dlines->l_nblines || lineno < 0) {
                     *ep != ' ')                          fatal("invalid line specification in RCS patch");
                         fatal("invalid line specification in RCS patch: %s",                  }
                             ep);  
                 ep++;                  ep++;
                 nbln = (int)strtol(ep, &ep, 10);                  nbln = (int)strtol(ep, &ep, 10);
                 if (nbln < 0 || *ep != '\0')                  /* Restore the last byte of the buffer */
                   lp->l_line[lp->l_len - 1] = tmp;
                   if (nbln < 0)
                         fatal("invalid line number specification in RCS patch");                          fatal("invalid line number specification in RCS patch");
   
                 /* find the appropriate line */                  /* find the appropriate line */
Line 1170 
Line 1172 
 BUF*  BUF*
 rcs_getrev(RCSFILE *rfp, RCSNUM *frev)  rcs_getrev(RCSFILE *rfp, RCSNUM *frev)
 {  {
         size_t i;          size_t i, dlen, plen;
         int done, nextroot, found;          int done, nextroot, found;
         BUF *rcsbuf;          BUF *rcsbuf;
         RCSNUM *tnum, *bnum;          RCSNUM *tnum, *bnum;
         struct rcs_branch *brp;          struct rcs_branch *brp;
         struct rcs_delta *hrdp, *trdp, *rdp;          struct rcs_delta *hrdp, *trdp, *rdp;
         char *data;          u_char *data, *patch;
   
         if ((hrdp = rcs_findrev(rfp, rfp->rf_head)) == NULL)          if ((hrdp = rcs_findrev(rfp, rfp->rf_head)) == NULL)
                 fatal("rcs_getrev: no HEAD revision");                  fatal("rcs_getrev: no HEAD revision");
Line 1223 
Line 1225 
                         }                          }
                 }                  }
   
                 cvs_buf_putc(rcsbuf, '\0');                  plen = rdp->rd_tlen;
                   dlen = cvs_buf_len(rcsbuf);
                   patch = rdp->rd_text;
                 data = cvs_buf_release(rcsbuf);                  data = cvs_buf_release(rcsbuf);
                   rcsbuf = cvs_patchfile(data, dlen, patch, plen,
                 rcsbuf = cvs_patchfile(data, rdp->rd_text, rcs_patch_lines);                      rcs_patch_lines);
                   xfree(data);
                 if (rcsbuf == NULL)                  if (rcsbuf == NULL)
                         fatal("rcs_getrev: failed to apply rcsdiff");                          fatal("rcs_getrev: failed to apply rcsdiff");
                 xfree(data);  
   
                 if (!rcsnum_differ(rdp->rd_num, bnum))                  if (!rcsnum_differ(rdp->rd_num, bnum))
                         break;                          break;
Line 2102 
Line 2106 
                 return (-1);                  return (-1);
         }          }
   
         rdp->rd_text = xmalloc(RCS_TOKLEN(rfp) + 1);          if (RCS_TOKLEN(rfp) == 0) {
         if (strlcpy(rdp->rd_text, RCS_TOKSTR(rfp), (RCS_TOKLEN(rfp) + 1)) >=                  rdp->rd_text = xmalloc(1);
             RCS_TOKLEN(rfp) + 1)                  rdp->rd_text[0] = '\0';
                 fatal("rcs_parse_deltatext: strlcpy");                  rdp->rd_tlen = 0;
         rdp->rd_tlen = RCS_TOKLEN(rfp);          } else {
                   rdp->rd_text = xmalloc(RCS_TOKLEN(rfp));
                   memcpy(rdp->rd_text, RCS_TOKSTR(rfp), RCS_TOKLEN(rfp));
                   rdp->rd_tlen = RCS_TOKLEN(rfp);
           }
   
         return (1);          return (1);
 }  }

Legend:
Removed from v.1.192  
changed lines
  Added in v.1.193