=================================================================== RCS file: /cvsrepo/anoncvs/cvs/src/usr.bin/cvs/rcs.c,v retrieving revision 1.167 retrieving revision 1.168 diff -c -r1.167 -r1.168 *** src/usr.bin/cvs/rcs.c 2006/04/13 23:41:13 1.167 --- src/usr.bin/cvs/rcs.c 2006/04/14 02:45:35 1.168 *************** *** 1,4 **** ! /* $OpenBSD: rcs.c,v 1.167 2006/04/13 23:41:13 ray Exp $ */ /* * Copyright (c) 2004 Jean-Francois Brousseau * All rights reserved. --- 1,4 ---- ! /* $OpenBSD: rcs.c,v 1.168 2006/04/14 02:45:35 deraadt Exp $ */ /* * Copyright (c) 2004 Jean-Francois Brousseau * All rights reserved. *************** *** 282,288 **** fmode = S_IRUSR|S_IRGRP|S_IROTH; flags &= 0xffff; /* ditch any internal flags */ ! if (((ret = stat(path, &st)) == -1) && (errno == ENOENT)) { if (flags & RCS_CREATE) { va_start(vap, flags); mode = va_arg(vap, int); --- 282,288 ---- fmode = S_IRUSR|S_IRGRP|S_IROTH; flags &= 0xffff; /* ditch any internal flags */ ! if (((ret = stat(path, &st)) == -1) && errno == ENOENT) { if (flags & RCS_CREATE) { va_start(vap, flags); mode = va_arg(vap, int); *************** *** 296,302 **** rcs_errno = RCS_ERR_NOENT; return (NULL); } ! } else if ((ret == 0) && (flags & RCS_CREATE)) { cvs_log(LP_ERR, "RCS file `%s' exists", path); return (NULL); } --- 296,302 ---- rcs_errno = RCS_ERR_NOENT; return (NULL); } ! } else if (ret == 0 && (flags & RCS_CREATE)) { cvs_log(LP_ERR, "RCS file `%s' exists", path); return (NULL); } *************** *** 546,553 **** if (rename(fn, rfp->rf_path) == -1) { if (errno == EXDEV) { /* rename() not supported so we have to copy. */ ! if ((chmod(rfp->rf_path, S_IWUSR) == -1) ! && !(rfp->rf_flags & RCS_CREATE)) { fatal("chmod(%s, 0%o) failed", rfp->rf_path, S_IWUSR); } --- 546,553 ---- if (rename(fn, rfp->rf_path) == -1) { if (errno == EXDEV) { /* rename() not supported so we have to copy. */ ! if (chmod(rfp->rf_path, S_IWUSR) == -1 && ! !(rfp->rf_flags & RCS_CREATE)) { fatal("chmod(%s, 0%o) failed", rfp->rf_path, S_IWUSR); } *************** *** 603,609 **** } } ! if ((chmod(rfp->rf_path, rfp->rf_mode) == -1)) { cvs_log(LP_ERRNO, "failed to chmod `%s'", rfp->rf_path); return (-1); --- 603,609 ---- } } ! if (chmod(rfp->rf_path, rfp->rf_mode) == -1) { cvs_log(LP_ERRNO, "failed to chmod `%s'", rfp->rf_path); return (-1); *************** *** 916,923 **** /* first look for duplication */ TAILQ_FOREACH(lkp, &(file->rf_locks), rl_list) { ! if ((strcmp(lkp->rl_name, user) == 0) && ! (rcsnum_cmp(rev, lkp->rl_num, 0) == 0)) { rcs_errno = RCS_ERR_DUPENT; return (-1); } --- 916,923 ---- /* first look for duplication */ TAILQ_FOREACH(lkp, &(file->rf_locks), rl_list) { ! if (strcmp(lkp->rl_name, user) == 0 && ! rcsnum_cmp(rev, lkp->rl_num, 0) == 0) { rcs_errno = RCS_ERR_DUPENT; return (-1); } *************** *** 948,955 **** struct rcs_lock *lkp; TAILQ_FOREACH(lkp, &(file->rf_locks), rl_list) { ! if ((strcmp(lkp->rl_name, user) == 0) && ! (rcsnum_cmp(lkp->rl_num, rev, 0) == 0)) break; } --- 948,955 ---- struct rcs_lock *lkp; TAILQ_FOREACH(lkp, &(file->rf_locks), rl_list) { ! if (strcmp(lkp->rl_name, user) == 0 && ! rcsnum_cmp(lkp->rl_num, rev, 0) == 0) break; } *************** *** 1081,1092 **** lp = TAILQ_NEXT(lp, l_list)) { op = *(lp->l_line); lineno = (int)strtol((lp->l_line + 1), &ep, 10); ! if ((lineno > dlines->l_nblines) || (lineno < 0) || ! (*ep != ' ')) fatal("invalid line specification in RCS patch"); ep++; nbln = (int)strtol(ep, &ep, 10); ! if ((nbln < 0) || (*ep != '\0')) fatal("invalid line number specification in RCS patch"); /* find the appropriate line */ --- 1081,1092 ---- lp = TAILQ_NEXT(lp, l_list)) { op = *(lp->l_line); lineno = (int)strtol((lp->l_line + 1), &ep, 10); ! if (lineno > dlines->l_nblines || lineno < 0 || ! *ep != ' ') fatal("invalid line specification in RCS patch"); ep++; nbln = (int)strtol(ep, &ep, 10); ! if (nbln < 0 || *ep != '\0') fatal("invalid line number specification in RCS patch"); /* find the appropriate line */ *************** *** 1099,1105 **** dlp = TAILQ_PREV(dlp, cvs_tqh, l_list); } else if (dlp->l_lineno < lineno) { if (((ndlp = TAILQ_NEXT(dlp, l_list)) == NULL) || ! (ndlp->l_lineno > lineno)) break; dlp = ndlp; } --- 1099,1105 ---- dlp = TAILQ_PREV(dlp, cvs_tqh, l_list); } else if (dlp->l_lineno < lineno) { if (((ndlp = TAILQ_NEXT(dlp, l_list)) == NULL) || ! ndlp->l_lineno > lineno) break; dlp = ndlp; } *************** *** 1238,1245 **** if (rcsnum_cmp(rfp->rf_head, rev, 0) == 0) break; ! if ((isbranch == 1) && (rdp->rd_num->rn_len < rev->rn_len) && ! (!TAILQ_EMPTY(&(rdp->rd_branches)))) lookonbranch = 1; if (isbranch && lookonbranch == 1) { --- 1238,1245 ---- if (rcsnum_cmp(rfp->rf_head, rev, 0) == 0) break; ! if (isbranch == 1 && rdp->rd_num->rn_len < rev->rn_len && ! !TAILQ_EMPTY(&(rdp->rd_branches))) lookonbranch = 1; if (isbranch && lookonbranch == 1) { *************** *** 1285,1292 **** break; } while (rcsnum_cmp(crev, rev, 0) != 0); ! if (cvs_buf_getc(rbuf, cvs_buf_len(rbuf)-1) != '\n' ! && rbuf != NULL) cvs_buf_putc(rbuf, '\n'); return (rbuf); --- 1285,1292 ---- break; } while (rcsnum_cmp(crev, rev, 0) != 0); ! if (cvs_buf_getc(rbuf, cvs_buf_len(rbuf)-1) != '\n' && ! rbuf != NULL) cvs_buf_putc(rbuf, '\n'); return (rbuf); *************** *** 1417,1423 **** fatal("error getting revision"); } ! if ((prevrdp != NULL) && (nextrdp != NULL)) { if ((nextbuf = rcs_getrev(rf, nextrdp->rd_num)) == NULL) fatal("error getting revision"); --- 1417,1423 ---- fatal("error getting revision"); } ! if (prevrdp != NULL && nextrdp != NULL) { if ((nextbuf = rcs_getrev(rf, nextrdp->rd_num)) == NULL) fatal("error getting revision"); *************** *** 1452,1458 **** cvs_diffreg(path_tmp1, path_tmp2, newdiff); newdeltatext = cvs_buf_release(newdiff); ! } else if ((nextrdp == NULL) && (prevrdp != NULL)) { newdeltatext = cvs_buf_release(prevbuf); } --- 1452,1458 ---- cvs_diffreg(path_tmp1, path_tmp2, newdiff); newdeltatext = cvs_buf_release(newdiff); ! } else if (nextrdp == NULL && prevrdp != NULL) { newdeltatext = cvs_buf_release(prevbuf); } *************** *** 1464,1470 **** TAILQ_REMOVE(&(rf->rf_delta), rdp, rd_list); /* update pointers */ ! if ((prevrdp != NULL) && (nextrdp != NULL)) { rcsnum_cpy(prevrdp->rd_num, nextrdp->rd_next, 0); } else if (prevrdp != NULL) { rcs_head_set(rf, prevrdp->rd_num); --- 1464,1470 ---- TAILQ_REMOVE(&(rf->rf_delta), rdp, rd_list); /* update pointers */ ! if (prevrdp != NULL && nextrdp != NULL) { rcsnum_cpy(prevrdp->rd_num, nextrdp->rd_next, 0); } else if (prevrdp != NULL) { rcs_head_set(rf, prevrdp->rd_num); *************** *** 1510,1517 **** * is greater than the requested revision. */ rdp = TAILQ_LAST(&(rfp->rf_delta), rcs_dlist); ! if ((rdp == NULL) ! || (rcsnum_cmp(rdp->rd_num, rev, 0) == -1)) { rcs_parse_deltas(rfp, rev); } --- 1510,1517 ---- * is greater than the requested revision. */ rdp = TAILQ_LAST(&(rfp->rf_delta), rcs_dlist); ! if (rdp == NULL || ! rcsnum_cmp(rdp->rd_num, rev, 0) == -1) { rcs_parse_deltas(rfp, rev); } *************** *** 1641,1647 **** { const char *esp; ! if ((code < 0) || ((code >= (int)RCS_NERR) && (code != RCS_ERR_ERRNO))) esp = NULL; else if (code == RCS_ERR_ERRNO) esp = strerror(errno); --- 1641,1647 ---- { const char *esp; ! if (code < 0 || (code >= (int)RCS_NERR && code != RCS_ERR_ERRNO)) esp = NULL; else if (code == RCS_ERR_ERRNO) esp = strerror(errno); *************** *** 1691,1698 **** int ret; struct rcs_delta *rdp; ! if ((rfp->rf_flags & PARSED_DELTATEXTS) ! || (rfp->rf_flags & RCS_CREATE)) return; if (!(rfp->rf_flags & PARSED_DESC)) --- 1691,1698 ---- int ret; struct rcs_delta *rdp; ! if ((rfp->rf_flags & PARSED_DELTATEXTS) || ! (rfp->rf_flags & RCS_CREATE)) return; if (!(rfp->rf_flags & PARSED_DESC)) *************** *** 1806,1812 **** rcs_errno = RCS_ERR_PARSE; cvs_log(LP_ERR, "parse error in RCS admin section"); goto fail; ! } else if ((tok == RCS_TOK_NUM) || (tok == RCS_TOK_DESC)) { /* * Assume this is the start of the first delta or * that we are dealing with an empty RCS file and --- 1806,1812 ---- rcs_errno = RCS_ERR_PARSE; cvs_log(LP_ERR, "parse error in RCS admin section"); goto fail; ! } else if (tok == RCS_TOK_NUM || tok == RCS_TOK_DESC) { /* * Assume this is the start of the first delta or * that we are dealing with an empty RCS file and *************** *** 3022,3028 **** content = NULL; oldrev = NULL; ! if ((type != CHECKOUT_REV_MERGED) && (type != CHECKOUT_REV_REMOVED)) { /* fetch the contents of the revision */ if ((bp = rcs_getrev(rf, rev)) == NULL) { cvs_log(LP_ERR, "revision '%s' not found in file '%s'", --- 3022,3028 ---- content = NULL; oldrev = NULL; ! if (type != CHECKOUT_REV_MERGED && type != CHECKOUT_REV_REMOVED) { /* fetch the contents of the revision */ if ((bp = rcs_getrev(rf, rev)) == NULL) { cvs_log(LP_ERR, "revision '%s' not found in file '%s'", *************** *** 3050,3056 **** type == CHECKOUT_REV_UPDATED) { ctime_r(&rcstime, timebuf); l = strlen(timebuf); ! if ((l > 0) && (timebuf[l - 1] == '\n')) timebuf[--l] = '\0'; l = snprintf(entry, sizeof(entry), "/%s/%s/%s/%s/", cf->cf_name, --- 3050,3056 ---- type == CHECKOUT_REV_UPDATED) { ctime_r(&rcstime, timebuf); l = strlen(timebuf); ! if (l > 0 && timebuf[l - 1] == '\n') timebuf[--l] = '\0'; l = snprintf(entry, sizeof(entry), "/%s/%s/%s/%s/", cf->cf_name,