=================================================================== RCS file: /cvsrepo/anoncvs/cvs/src/usr.bin/cvs/rcs.c,v retrieving revision 1.193 retrieving revision 1.194 diff -c -r1.193 -r1.194 *** src/usr.bin/cvs/rcs.c 2007/01/11 17:44:18 1.193 --- src/usr.bin/cvs/rcs.c 2007/01/12 17:25:33 1.194 *************** *** 1,4 **** ! /* $OpenBSD: rcs.c,v 1.193 2007/01/11 17:44:18 niallo Exp $ */ /* * Copyright (c) 2004 Jean-Francois Brousseau * All rights reserved. --- 1,4 ---- ! /* $OpenBSD: rcs.c,v 1.194 2007/01/12 17:25:33 joris Exp $ */ /* * Copyright (c) 2004 Jean-Francois Brousseau * All rights reserved. *************** *** 1374,1382 **** int rcs_rev_remove(RCSFILE *rf, RCSNUM *rev) { ! char *newdeltatext, *path_tmp1, *path_tmp2; struct rcs_delta *rdp, *prevrdp, *nextrdp; ! BUF *nextbuf, *prevbuf, *newdiff; if (rev == RCS_HEAD_REV) rev = rf->rf_head; --- 1374,1382 ---- int rcs_rev_remove(RCSFILE *rf, RCSNUM *rev) { ! char *path_tmp1, *path_tmp2; struct rcs_delta *rdp, *prevrdp, *nextrdp; ! BUF *nextbuf, *prevbuf, *newdiff, *newdeltatext; if (rev == RCS_HEAD_REV) rev = rf->rf_head; *************** *** 1424,1432 **** if (cvs_diffreg(path_tmp1, path_tmp2, newdiff) == D_ERROR) fatal("rcs_diffreg failed"); ! newdeltatext = cvs_buf_release(newdiff); } else if (nextrdp == NULL && prevrdp != NULL) { ! newdeltatext = cvs_buf_release(prevbuf); } if (newdeltatext != NULL) { --- 1424,1432 ---- if (cvs_diffreg(path_tmp1, path_tmp2, newdiff) == D_ERROR) fatal("rcs_diffreg failed"); ! newdeltatext = newdiff; } else if (nextrdp == NULL && prevrdp != NULL) { ! newdeltatext = prevbuf; } if (newdeltatext != NULL) { *************** *** 2792,2800 **** * Returns -1 on error, 0 on success. */ int ! rcs_deltatext_set(RCSFILE *rfp, RCSNUM *rev, const char *dtext) { size_t len; struct rcs_delta *rdp; /* Write operations require full parsing */ --- 2792,2801 ---- * Returns -1 on error, 0 on success. */ int ! rcs_deltatext_set(RCSFILE *rfp, RCSNUM *rev, BUF *bp) { size_t len; + u_char *dtext; struct rcs_delta *rdp; /* Write operations require full parsing */ *************** *** 2806,2821 **** if (rdp->rd_text != NULL) xfree(rdp->rd_text); ! len = strlen(dtext); if (len != 0) { ! /* XXX - use xstrdup() if rd_text changes to char *. */ ! rdp->rd_text = xmalloc(len + 1); rdp->rd_tlen = len; ! (void)memcpy(rdp->rd_text, dtext, len + 1); } else { rdp->rd_text = NULL; rdp->rd_tlen = 0; } return (0); } --- 2807,2827 ---- if (rdp->rd_text != NULL) xfree(rdp->rd_text); ! len = cvs_buf_len(bp); ! dtext = cvs_buf_release(bp); ! bp = NULL; ! if (len != 0) { ! rdp->rd_text = xmalloc(len); rdp->rd_tlen = len; ! (void)memcpy(rdp->rd_text, dtext, len); } else { rdp->rd_text = NULL; rdp->rd_tlen = 0; } + + if (dtext != NULL) + xfree(dtext); return (0); }