=================================================================== RCS file: /cvsrepo/anoncvs/cvs/src/usr.bin/cvs/rcs.c,v retrieving revision 1.154 retrieving revision 1.155 diff -c -r1.154 -r1.155 *** src/usr.bin/cvs/rcs.c 2006/03/28 07:42:56 1.154 --- src/usr.bin/cvs/rcs.c 2006/03/29 09:16:53 1.155 *************** *** 1,4 **** ! /* $OpenBSD: rcs.c,v 1.154 2006/03/28 07:42:56 ray Exp $ */ /* * Copyright (c) 2004 Jean-Francois Brousseau * All rights reserved. --- 1,4 ---- ! /* $OpenBSD: rcs.c,v 1.155 2006/03/29 09:16:53 ray Exp $ */ /* * Copyright (c) 2004 Jean-Francois Brousseau * All rights reserved. *************** *** 251,257 **** static int rcs_gettok(RCSFILE *); static int rcs_pushtok(RCSFILE *, const char *, int); static void rcs_growbuf(RCSFILE *); ! static int rcs_strprint(const u_char *, size_t, FILE *); static char* rcs_expand_keywords(char *, struct rcs_delta *, char *, size_t, int); --- 251,257 ---- static int rcs_gettok(RCSFILE *); static int rcs_pushtok(RCSFILE *, const char *, int); static void rcs_growbuf(RCSFILE *); ! static void rcs_strprint(const u_char *, size_t, FILE *); static char* rcs_expand_keywords(char *, struct rcs_delta *, char *, size_t, int); *************** *** 412,418 **** struct rcs_branch *brp; struct rcs_delta *rdp; struct rcs_lock *lkp; ! ssize_t nread; size_t len; int fd, from_fd, to_fd; --- 412,418 ---- struct rcs_branch *brp; struct rcs_delta *rdp; struct rcs_lock *lkp; ! ssize_t nread, nwritten; size_t len; int fd, from_fd, to_fd; *************** *** 569,577 **** } bp = xmalloc(MAXBSIZE); ! while ((nread = read(from_fd, bp, MAXBSIZE)) > 0) { ! if (write(to_fd, bp, nread) != nread) goto err; } if (nread < 0) { --- 569,582 ---- } bp = xmalloc(MAXBSIZE); ! for (;;) { ! if ((nread = read(from_fd, bp, MAXBSIZE)) == 0) ! break; ! if (nread == -1) goto err; + nwritten = write(to_fd, bp, (size_t)nread); + if (nwritten == -1 || nwritten != nread) + goto err; } if (nread < 0) { *************** *** 1366,1372 **** */ enddelta = TAILQ_LAST(&(rfp->rf_delta), rcs_dlist); if ((enddelta == NULL) ! || (rcsnum_cmp(enddelta->rd_num, rev, -1) == -1)) { rcs_parse_deltas(rfp, rev); } --- 1371,1377 ---- */ enddelta = TAILQ_LAST(&(rfp->rf_delta), rcs_dlist); if ((enddelta == NULL) ! || (rcsnum_cmp(enddelta->rd_num, rev, 0) == -1)) { rcs_parse_deltas(rfp, rev); } *************** *** 1529,1535 **** ret = rcs_parse_delta(rfp); if (rev != NULL) { enddelta = TAILQ_LAST(&(rfp->rf_delta), rcs_dlist); ! if (rcsnum_cmp(enddelta->rd_num, rev, -1) == 0) break; } if (ret == 0) { --- 1534,1540 ---- ret = rcs_parse_delta(rfp); if (rev != NULL) { enddelta = TAILQ_LAST(&(rfp->rf_delta), rcs_dlist); ! if (rcsnum_cmp(enddelta->rd_num, rev, 0) == 0) break; } if (ret == 0) { *************** *** 2448,2461 **** * '@' characters are escaped. Otherwise, the string can contain arbitrary * binary data. */ ! static int rcs_strprint(const u_char *str, size_t slen, FILE *stream) { const u_char *ap, *ep, *sp; - size_t ret; if (slen == 0) ! return (0); ep = str + slen - 1; --- 2453,2465 ---- * '@' characters are escaped. Otherwise, the string can contain arbitrary * binary data. */ ! static void rcs_strprint(const u_char *str, size_t slen, FILE *stream) { const u_char *ap, *ep, *sp; if (slen == 0) ! return; ep = str + slen - 1; *************** *** 2463,2476 **** ap = memchr(sp, '@', ep - sp); if (ap == NULL) ap = ep; ! ret = fwrite(sp, sizeof(u_char), ap - sp + 1, stream); if (*ap == '@') putc('@', stream); sp = ap + 1; } - - return (0); } /* --- 2467,2478 ---- ap = memchr(sp, '@', ep - sp); if (ap == NULL) ap = ep; ! (void)fwrite(sp, sizeof(u_char), ap - sp + 1, stream); if (*ap == '@') putc('@', stream); sp = ap + 1; } } /* *************** *** 2484,2492 **** rcs_expand_keywords(char *rcsfile, struct rcs_delta *rdp, char *data, size_t len, int mode) { size_t i; ! int kwtype, sizdiff; ! u_int j, found, start_offset, c_offset; char *c, *kwstr, *start, *end, *tbuf; char expbuf[256], buf[256]; struct tm *tb; --- 2486,2495 ---- rcs_expand_keywords(char *rcsfile, struct rcs_delta *rdp, char *data, size_t len, int mode) { + ptrdiff_t c_offset, sizdiff, start_offset; size_t i; ! int kwtype; ! u_int j, found; char *c, *kwstr, *start, *end, *tbuf; char expbuf[256], buf[256]; struct tm *tb; *************** *** 2685,2693 **** len = strlen(dtext); if (len != 0) { ! rdp->rd_text = (u_char *)xmalloc(len); ! rdp->rd_tlen = len - 1; ! strlcpy(rdp->rd_text, dtext, len); } else { rdp->rd_text = NULL; rdp->rd_tlen = 0; --- 2688,2696 ---- len = strlen(dtext); if (len != 0) { ! rdp->rd_text = (u_char *)xmalloc(len + 1); ! rdp->rd_tlen = len; ! (void)memcpy(rdp->rd_text, dtext, len + 1); } else { rdp->rd_text = NULL; rdp->rd_tlen = 0;