=================================================================== RCS file: /cvsrepo/anoncvs/cvs/src/usr.bin/cvs/diff.c,v retrieving revision 1.110 retrieving revision 1.111 diff -c -r1.110 -r1.111 *** src/usr.bin/cvs/diff.c 2007/01/11 02:35:55 1.110 --- src/usr.bin/cvs/diff.c 2007/01/11 10:37:18 1.111 *************** *** 1,4 **** ! /* $OpenBSD: diff.c,v 1.110 2007/01/11 02:35:55 joris Exp $ */ /* * Copyright (c) 2006 Joris Vink * --- 1,4 ---- ! /* $OpenBSD: diff.c,v 1.111 2007/01/11 10:37:18 xsa Exp $ */ /* * Copyright (c) 2006 Joris Vink * *************** *** 153,165 **** void cvs_diff_local(struct cvs_file *cf) { - size_t len; RCSNUM *r1; BUF *b1, *b2; struct stat st; struct timeval tv[2], tv2[2]; ! char rbuf[16], p1[MAXPATHLEN], p2[MAXPATHLEN]; cvs_log(LP_TRACE, "cvs_diff_local(%s)", cf->file_path); if (cf->file_type == CVS_DIR) { --- 153,167 ---- void cvs_diff_local(struct cvs_file *cf) { RCSNUM *r1; BUF *b1, *b2; struct stat st; struct timeval tv[2], tv2[2]; ! char rbuf[16], *p1, *p2; + r1 = NULL; + b1 = b2 = NULL; + cvs_log(LP_TRACE, "cvs_diff_local(%s)", cf->file_path); if (cf->file_type == CVS_DIR) { *************** *** 256,296 **** cvs_printf(" %s\n", cf->file_path); if (cf->file_status != FILE_ADDED) { ! len = strlcpy(p1, cvs_tmpdir, sizeof(p1)); ! if (len >= sizeof(p1)) ! fatal("cvs_diff_local: truncation"); ! ! len = strlcat(p1, "/diff1.XXXXXXXXXX", sizeof(p1)); ! if (len >= sizeof(p1)) ! fatal("cvs_diff_local: truncation"); ! cvs_buf_write_stmp(b1, p1, tv); cvs_buf_free(b1); ! } else { ! len = strlcpy(p1, CVS_PATH_DEVNULL, sizeof(p1)); ! if (len >= sizeof(p1)) ! fatal("cvs_diff_local: truncation"); ! } if (cf->file_status != FILE_REMOVED) { ! len = strlcpy(p2, cvs_tmpdir, sizeof(p2)); ! if (len >= sizeof(p2)) ! fatal("cvs_diff_local: truncation"); ! ! len = strlcat(p2, "/diff2.XXXXXXXXXX", sizeof(p2)); ! if (len >= sizeof(p2)) ! fatal("cvs_diff_local: truncation"); ! cvs_buf_write_stmp(b2, p2, tv2); cvs_buf_free(b2); ! } else { ! len = strlcpy(p2, CVS_PATH_DEVNULL, sizeof(p2)); ! if (len >= sizeof(p2)) ! fatal("cvs_diff_local: truncation"); ! } ! cvs_diffreg(p1, p2, NULL); cvs_worklist_run(&temp_files, cvs_worklist_unlink); if (diff_rev1 != NULL && diff_rev1 != cf->file_ent->ce_rev) rcsnum_free(diff_rev1); --- 258,285 ---- cvs_printf(" %s\n", cf->file_path); if (cf->file_status != FILE_ADDED) { ! (void)xasprintf(&p1, "%s/diff1.XXXXXXXXXX", cvs_tmpdir); cvs_buf_write_stmp(b1, p1, tv); cvs_buf_free(b1); ! } else ! (void)xasprintf(&p1, "%s", CVS_PATH_DEVNULL); if (cf->file_status != FILE_REMOVED) { ! (void)xasprintf(&p2, "%s/diff2.XXXXXXXXXX", cvs_tmpdir); cvs_buf_write_stmp(b2, p2, tv2); cvs_buf_free(b2); ! } else ! (void)xasprintf(&p2, "%s", CVS_PATH_DEVNULL); ! if (cvs_diffreg(p1, p2, NULL) == D_ERROR) ! fatal("cvs_diff_local: failed to get RCS patch"); ! cvs_worklist_run(&temp_files, cvs_worklist_unlink); + + if (p1 != NULL) + xfree(p1); + if (p2 != NULL) + xfree(p2); if (diff_rev1 != NULL && diff_rev1 != cf->file_ent->ce_rev) rcsnum_free(diff_rev1);