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

Diff for /src/usr.bin/rcs/rcs.c between version 1.34 and 1.35

version 1.34, 2006/12/21 15:37:44 version 1.35, 2007/01/02 16:43:45
Line 483 
Line 483 
                                 fputc('\n', fp);                                  fputc('\n', fp);
                 }                  }
                 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);
         }          }
         (void)fclose(fp);          (void)fclose(fp);
Line 1038 
Line 1032 
         char op, *ep;          char op, *ep;
         struct rcs_line *lp, *dlp, *ndlp;          struct rcs_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 1045 
Line 1040 
         /* 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)
                           errx(1, "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 > dlines->l_nblines || lineno < 0 ||
                     *ep != ' ')                      *ep != ' ')
                         errx(1, "invalid line specification in RCS patch");                          errx(1, "invalid line specification in RCS patch");
                 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)
                         errx(1,                          errx(1,
                             "invalid line number specification in RCS patch");                              "invalid line number specification in RCS patch");
   
Line 1078 
Line 1080 
                         for (i = 0; (i < nbln) && (dlp != NULL); i++) {                          for (i = 0; (i < nbln) && (dlp != NULL); i++) {
                                 ndlp = TAILQ_NEXT(dlp, l_list);                                  ndlp = TAILQ_NEXT(dlp, l_list);
                                 TAILQ_REMOVE(&(dlines->l_lines), dlp, l_list);                                  TAILQ_REMOVE(&(dlines->l_lines), dlp, l_list);
                                 if (dlp->l_line != NULL)  
                                         xfree(dlp->l_line);  
                                 xfree(dlp);                                  xfree(dlp);
                                 dlp = ndlp;                                  dlp = ndlp;
                                 /* last line is gone - reset dlp */                                  /* last line is gone - reset dlp */
Line 1134 
Line 1134 
 {  {
         u_int i, numlen;          u_int i, numlen;
         int isbranch, lookonbranch, found;          int isbranch, lookonbranch, found;
         size_t len;          size_t dlen, plen, len;
         RCSNUM *crev, *rev, *brev;          RCSNUM *crev, *rev, *brev;
         BUF *rbuf, *dtext;          BUF *rbuf;
         struct rcs_delta *rdp = NULL;          struct rcs_delta *rdp = NULL;
         struct rcs_branch *rb;          struct rcs_branch *rb;
           u_char *data, *patch;
   
         if (rfp->rf_head == NULL)          if (rfp->rf_head == NULL)
                 return (NULL);                  return (NULL);
Line 1244 
Line 1245 
                         return (NULL);                          return (NULL);
                 }                  }
   
                 rcs_buf_putc(rbuf, '\0');                  plen = rdp->rd_tlen;
                   dlen = rcs_buf_len(rbuf);
                   patch = rdp->rd_text;
                   data = rcs_buf_release(rbuf);
                 /* check if we have parsed this rev's deltatext */                  /* check if we have parsed this rev's deltatext */
                 if (rdp->rd_tlen == 0)                  if (rdp->rd_tlen == 0)
                         rcs_parse_deltatexts(rfp, rdp->rd_num);                          rcs_parse_deltatexts(rfp, rdp->rd_num);
   
                   rbuf = rcs_patchfile(data, dlen, patch, plen, rcs_patch_lines);
   
                 dtext = rcs_buf_alloc(len, BUF_AUTOEXT);  
                 rcs_buf_append(dtext, rdp->rd_text, rdp->rd_tlen);  
                 rbuf = rcs_patchfile(rbuf, dtext, rcs_patch_lines);  
   
                 if (rbuf == NULL)                  if (rbuf == NULL)
                         break;                          break;
         } while (rcsnum_cmp(crev, rev, 0) != 0);          } while (rcsnum_cmp(crev, rev, 0) != 0);
   
         if (rcs_buf_getc(rbuf, rcs_buf_len(rbuf)-1) != '\n' &&  
             rbuf != NULL)  
                 rcs_buf_putc(rbuf, '\n');  
   
         return (rbuf);          return (rbuf);
 }  }

Legend:
Removed from v.1.34  
changed lines
  Added in v.1.35