version 1.109, 2005/12/08 18:56:10 |
version 1.110, 2005/12/10 20:27:45 |
|
|
return (NULL); |
return (NULL); |
} |
} |
|
|
if ((rfp = (RCSFILE *)malloc(sizeof(*rfp))) == NULL) { |
rfp = (RCSFILE *)xmalloc(sizeof(*rfp)); |
cvs_log(LP_ERRNO, "failed to allocate RCS file structure"); |
|
rcs_errno = RCS_ERR_ERRNO; |
|
return (NULL); |
|
} |
|
memset(rfp, 0, sizeof(*rfp)); |
memset(rfp, 0, sizeof(*rfp)); |
|
|
if ((rfp->rf_path = strdup(path)) == NULL) { |
rfp->rf_path = xstrdup(path); |
rcs_errno = RCS_ERR_ERRNO; |
|
cvs_log(LP_ERRNO, "failed to duplicate RCS file path"); |
|
free(rfp); |
|
return (NULL); |
|
} |
|
|
|
rfp->rf_ref = 1; |
rfp->rf_ref = 1; |
rfp->rf_flags = flags | RCS_SLOCK; |
rfp->rf_flags = flags | RCS_SLOCK; |
rfp->rf_mode = fmode; |
rfp->rf_mode = fmode; |
|
|
return (NULL); |
return (NULL); |
} |
} |
|
|
rdp->rd_locker = strdup(lkr->rl_name); |
rdp->rd_locker = xstrdup(lkr->rl_name); |
if (rdp->rd_locker == NULL) { |
|
rcs_close(rfp); |
|
return (NULL); |
|
} |
|
} |
} |
|
|
return (rfp); |
return (rfp); |
|
|
while (!TAILQ_EMPTY(&(rfp->rf_access))) { |
while (!TAILQ_EMPTY(&(rfp->rf_access))) { |
rap = TAILQ_FIRST(&(rfp->rf_access)); |
rap = TAILQ_FIRST(&(rfp->rf_access)); |
TAILQ_REMOVE(&(rfp->rf_access), rap, ra_list); |
TAILQ_REMOVE(&(rfp->rf_access), rap, ra_list); |
free(rap->ra_name); |
xfree(rap->ra_name); |
free(rap); |
xfree(rap); |
} |
} |
|
|
while (!TAILQ_EMPTY(&(rfp->rf_symbols))) { |
while (!TAILQ_EMPTY(&(rfp->rf_symbols))) { |
rsp = TAILQ_FIRST(&(rfp->rf_symbols)); |
rsp = TAILQ_FIRST(&(rfp->rf_symbols)); |
TAILQ_REMOVE(&(rfp->rf_symbols), rsp, rs_list); |
TAILQ_REMOVE(&(rfp->rf_symbols), rsp, rs_list); |
rcsnum_free(rsp->rs_num); |
rcsnum_free(rsp->rs_num); |
free(rsp->rs_name); |
xfree(rsp->rs_name); |
free(rsp); |
xfree(rsp); |
} |
} |
|
|
while (!TAILQ_EMPTY(&(rfp->rf_locks))) { |
while (!TAILQ_EMPTY(&(rfp->rf_locks))) { |
rlp = TAILQ_FIRST(&(rfp->rf_locks)); |
rlp = TAILQ_FIRST(&(rfp->rf_locks)); |
TAILQ_REMOVE(&(rfp->rf_locks), rlp, rl_list); |
TAILQ_REMOVE(&(rfp->rf_locks), rlp, rl_list); |
rcsnum_free(rlp->rl_num); |
rcsnum_free(rlp->rl_num); |
free(rlp->rl_name); |
xfree(rlp->rl_name); |
free(rlp); |
xfree(rlp); |
} |
} |
|
|
if (rfp->rf_head != NULL) |
if (rfp->rf_head != NULL) |
|
|
rcsnum_free(rfp->rf_branch); |
rcsnum_free(rfp->rf_branch); |
|
|
if (rfp->rf_path != NULL) |
if (rfp->rf_path != NULL) |
free(rfp->rf_path); |
xfree(rfp->rf_path); |
if (rfp->rf_comment != NULL) |
if (rfp->rf_comment != NULL) |
free(rfp->rf_comment); |
xfree(rfp->rf_comment); |
if (rfp->rf_expand != NULL) |
if (rfp->rf_expand != NULL) |
free(rfp->rf_expand); |
xfree(rfp->rf_expand); |
if (rfp->rf_desc != NULL) |
if (rfp->rf_desc != NULL) |
free(rfp->rf_desc); |
xfree(rfp->rf_desc); |
free(rfp); |
xfree(rfp); |
} |
} |
|
|
/* |
/* |
|
|
return (-1); |
return (-1); |
} |
} |
|
|
if ((bp = malloc(MAXBSIZE)) == NULL) { |
bp = xmalloc(MAXBSIZE); |
cvs_log(LP_ERRNO, "failed to allocate memory"); |
|
close(from_fd); |
|
close(to_fd); |
|
return (-1); |
|
} |
|
|
|
while ((nread = read(from_fd, bp, MAXBSIZE)) > 0) { |
while ((nread = read(from_fd, bp, MAXBSIZE)) > 0) { |
if (write(to_fd, bp, nread) != nread) |
if (write(to_fd, bp, nread) != nread) |
goto err; |
goto err; |
|
|
rfp->rf_path); |
rfp->rf_path); |
close(from_fd); |
close(from_fd); |
close(to_fd); |
close(to_fd); |
free(bp); |
xfree(bp); |
return (-1); |
return (-1); |
} |
} |
|
|
close(from_fd); |
close(from_fd); |
close(to_fd); |
close(to_fd); |
free(bp); |
xfree(bp); |
|
|
if (unlink(fn) == -1) { |
if (unlink(fn) == -1) { |
cvs_log(LP_ERRNO, |
cvs_log(LP_ERRNO, |
|
|
} |
} |
} |
} |
|
|
ap = (struct rcs_access *)malloc(sizeof(*ap)); |
ap = (struct rcs_access *)xmalloc(sizeof(*ap)); |
if (ap == NULL) { |
ap->ra_name = xstrdup(login); |
rcs_errno = RCS_ERR_ERRNO; |
|
cvs_log(LP_ERRNO, "failed to allocate RCS access entry"); |
|
return (-1); |
|
} |
|
|
|
ap->ra_name = strdup(login); |
|
if (ap->ra_name == NULL) { |
|
cvs_log(LP_ERRNO, "failed to duplicate user name"); |
|
free(ap); |
|
return (-1); |
|
} |
|
|
|
TAILQ_INSERT_TAIL(&(file->rf_access), ap, ra_list); |
TAILQ_INSERT_TAIL(&(file->rf_access), ap, ra_list); |
|
|
/* not synced anymore */ |
/* not synced anymore */ |
|
|
} |
} |
|
|
TAILQ_REMOVE(&(file->rf_access), ap, ra_list); |
TAILQ_REMOVE(&(file->rf_access), ap, ra_list); |
free(ap->ra_name); |
xfree(ap->ra_name); |
free(ap); |
xfree(ap); |
|
|
/* not synced anymore */ |
/* not synced anymore */ |
file->rf_flags &= ~RCS_SYNCED; |
file->rf_flags &= ~RCS_SYNCED; |
|
|
} |
} |
} |
} |
|
|
if ((symp = (struct rcs_sym *)malloc(sizeof(*symp))) == NULL) { |
symp = (struct rcs_sym *)xmalloc(sizeof(*symp)); |
rcs_errno = RCS_ERR_ERRNO; |
symp->rs_name = xstrdup(sym); |
cvs_log(LP_ERRNO, "failed to allocate RCS symbol"); |
|
return (-1); |
|
} |
|
|
|
if ((symp->rs_name = strdup(sym)) == NULL) { |
|
rcs_errno = RCS_ERR_ERRNO; |
|
cvs_log(LP_ERRNO, "failed to duplicate symbol"); |
|
free(symp); |
|
return (-1); |
|
} |
|
|
|
if ((symp->rs_num = rcsnum_alloc()) == NULL) { |
if ((symp->rs_num = rcsnum_alloc()) == NULL) { |
free(symp->rs_name); |
xfree(symp->rs_name); |
free(symp); |
xfree(symp); |
return (-1); |
return (-1); |
} |
} |
rcsnum_cpy(snum, symp->rs_num, 0); |
rcsnum_cpy(snum, symp->rs_num, 0); |
|
|
} |
} |
|
|
TAILQ_REMOVE(&(file->rf_symbols), symp, rs_list); |
TAILQ_REMOVE(&(file->rf_symbols), symp, rs_list); |
free(symp->rs_name); |
xfree(symp->rs_name); |
rcsnum_free(symp->rs_num); |
rcsnum_free(symp->rs_num); |
free(symp); |
xfree(symp); |
|
|
/* not synced anymore */ |
/* not synced anymore */ |
file->rf_flags &= ~RCS_SYNCED; |
file->rf_flags &= ~RCS_SYNCED; |
|
|
} |
} |
} |
} |
|
|
if ((lkp = (struct rcs_lock *)malloc(sizeof(*lkp))) == NULL) { |
lkp = (struct rcs_lock *)xmalloc(sizeof(*lkp)); |
rcs_errno = RCS_ERR_ERRNO; |
lkp->rl_name = xstrdup(user); |
cvs_log(LP_ERRNO, "failed to allocate RCS lock"); |
|
return (-1); |
|
} |
|
|
|
lkp->rl_name = strdup(user); |
|
if (lkp->rl_name == NULL) { |
|
cvs_log(LP_ERRNO, "failed to duplicate user name"); |
|
free(lkp); |
|
return (-1); |
|
} |
|
|
|
if ((lkp->rl_num = rcsnum_alloc()) == NULL) { |
if ((lkp->rl_num = rcsnum_alloc()) == NULL) { |
free(lkp->rl_name); |
xfree(lkp->rl_name); |
free(lkp); |
xfree(lkp); |
return (-1); |
return (-1); |
} |
} |
rcsnum_cpy(rev, lkp->rl_num, 0); |
rcsnum_cpy(rev, lkp->rl_num, 0); |
|
|
|
|
TAILQ_REMOVE(&(file->rf_locks), lkp, rl_list); |
TAILQ_REMOVE(&(file->rf_locks), lkp, rl_list); |
rcsnum_free(lkp->rl_num); |
rcsnum_free(lkp->rl_num); |
free(lkp->rl_name); |
xfree(lkp->rl_name); |
free(lkp); |
xfree(lkp); |
|
|
/* not synced anymore */ |
/* not synced anymore */ |
file->rf_flags &= ~RCS_SYNCED; |
file->rf_flags &= ~RCS_SYNCED; |
|
|
{ |
{ |
char *tmp; |
char *tmp; |
|
|
if ((tmp = strdup(desc)) == NULL) |
tmp = xstrdup(desc); |
return (-1); |
|
|
|
if (file->rf_desc != NULL) |
if (file->rf_desc != NULL) |
free(file->rf_desc); |
xfree(file->rf_desc); |
file->rf_desc = tmp; |
file->rf_desc = tmp; |
file->rf_flags &= ~RCS_SYNCED; |
file->rf_flags &= ~RCS_SYNCED; |
|
|
|
|
{ |
{ |
char *tmp; |
char *tmp; |
|
|
if ((tmp = strdup(comment)) == NULL) |
tmp = xstrdup(comment); |
return (-1); |
|
|
|
if (file->rf_comment != NULL) |
if (file->rf_comment != NULL) |
free(file->rf_comment); |
xfree(file->rf_comment); |
file->rf_comment = tmp; |
file->rf_comment = tmp; |
file->rf_flags &= ~RCS_SYNCED; |
file->rf_flags &= ~RCS_SYNCED; |
|
|
|
|
bp = cvs_buf_release(rbuf); |
bp = cvs_buf_release(rbuf); |
rbuf = cvs_patchfile((char *)bp, (char *)rdp->rd_text, |
rbuf = cvs_patchfile((char *)bp, (char *)rdp->rd_text, |
rcs_patch_lines); |
rcs_patch_lines); |
free(bp); |
xfree(bp); |
if (rbuf == NULL) |
if (rbuf == NULL) |
break; |
break; |
} while (rcsnum_cmp(crev, rev, 0) != 0); |
} while (rcsnum_cmp(crev, rev, 0) != 0); |
|
|
} |
} |
cvs_freelines(lines); |
cvs_freelines(lines); |
} |
} |
free(bp); |
xfree(bp); |
} |
} |
|
|
return (dbuf); |
return (dbuf); |
|
|
return (-1); |
return (-1); |
} |
} |
|
|
if ((rdp = (struct rcs_delta *)malloc(sizeof(*rdp))) == NULL) { |
rdp = (struct rcs_delta *)xmalloc(sizeof(*rdp)); |
rcs_errno = RCS_ERR_ERRNO; |
|
rcsnum_free(old); |
|
return (-1); |
|
} |
|
memset(rdp, 0, sizeof(*rdp)); |
memset(rdp, 0, sizeof(*rdp)); |
|
|
TAILQ_INIT(&(rdp->rd_branches)); |
TAILQ_INIT(&(rdp->rd_branches)); |
|
|
if (username == NULL) |
if (username == NULL) |
username = pw->pw_name; |
username = pw->pw_name; |
|
|
if ((rdp->rd_author = strdup(username)) == NULL) { |
rdp->rd_author = xstrdup(username); |
rcs_freedelta(rdp); |
rdp->rd_state = xstrdup(RCS_STATE_EXP); |
rcsnum_free(old); |
rdp->rd_log = xstrdup(msg); |
return (-1); |
|
} |
|
|
|
if ((rdp->rd_state = strdup(RCS_STATE_EXP)) == NULL) { |
|
rcs_freedelta(rdp); |
|
rcsnum_free(old); |
|
return (-1); |
|
} |
|
|
|
if ((rdp->rd_log = strdup(msg)) == NULL) { |
|
rcs_errno = RCS_ERR_ERRNO; |
|
rcs_freedelta(rdp); |
|
rcsnum_free(old); |
|
return (-1); |
|
} |
|
|
|
if (date != (time_t)(-1)) |
if (date != (time_t)(-1)) |
now = date; |
now = date; |
else |
else |
|
|
buf[i++] = 'l'; |
buf[i++] = 'l'; |
} |
} |
|
|
if ((tmp = strdup(buf)) == NULL) { |
tmp = xstrdup(buf); |
cvs_log(LP_ERRNO, "%s: failed to copy expansion mode", |
|
file->rf_path); |
|
return (-1); |
|
} |
|
|
|
if (file->rf_expand != NULL) |
if (file->rf_expand != NULL) |
free(file->rf_expand); |
free(file->rf_expand); |
file->rf_expand = tmp; |
file->rf_expand = tmp; |
|
|
if (rfp->rf_flags & RCS_PARSED) |
if (rfp->rf_flags & RCS_PARSED) |
return (0); |
return (0); |
|
|
if ((pdp = (struct rcs_pdata *)malloc(sizeof(*pdp))) == NULL) { |
pdp = (struct rcs_pdata *)xmalloc(sizeof(*pdp)); |
rcs_errno = RCS_ERR_ERRNO; |
|
cvs_log(LP_ERRNO, "failed to allocate RCS parser data"); |
|
return (-1); |
|
} |
|
memset(pdp, 0, sizeof(*pdp)); |
memset(pdp, 0, sizeof(*pdp)); |
|
|
pdp->rp_lines = 0; |
pdp->rp_lines = 0; |
|
|
return (-1); |
return (-1); |
} |
} |
|
|
pdp->rp_buf = (char *)malloc((size_t)RCS_BUFSIZE); |
pdp->rp_buf = (char *)xmalloc((size_t)RCS_BUFSIZE); |
if (pdp->rp_buf == NULL) { |
|
rcs_errno = RCS_ERR_ERRNO; |
|
cvs_log(LP_ERRNO, "failed to allocate RCS parser buffer"); |
|
rcs_freepdata(pdp); |
|
return (-1); |
|
} |
|
pdp->rp_blen = RCS_BUFSIZE; |
pdp->rp_blen = RCS_BUFSIZE; |
pdp->rp_bufend = pdp->rp_buf + pdp->rp_blen - 1; |
pdp->rp_bufend = pdp->rp_buf + pdp->rp_blen - 1; |
|
|
|
|
return (-1); |
return (-1); |
} |
} |
|
|
rfp->rf_desc = strdup(RCS_TOKSTR(rfp)); |
rfp->rf_desc = xstrdup(RCS_TOKSTR(rfp)); |
if (rfp->rf_desc == NULL) { |
|
cvs_log(LP_ERRNO, "failed to duplicate rcs token"); |
|
rcs_freepdata(pdp); |
|
return (-1); |
|
} |
|
|
|
for (;;) { |
for (;;) { |
ret = rcs_parse_deltatext(rfp); |
ret = rcs_parse_deltatext(rfp); |
if (ret == 0) |
if (ret == 0) |
|
|
rfp->rf_branch) < 0) |
rfp->rf_branch) < 0) |
return (-1); |
return (-1); |
} else if (tok == RCS_TOK_COMMENT) { |
} else if (tok == RCS_TOK_COMMENT) { |
rfp->rf_comment = strdup(RCS_TOKSTR(rfp)); |
rfp->rf_comment = xstrdup(RCS_TOKSTR(rfp)); |
if (rfp->rf_comment == NULL) { |
|
cvs_log(LP_ERRNO, |
|
"failed to duplicate rcs token"); |
|
return (-1); |
|
} |
|
} else if (tok == RCS_TOK_EXPAND) { |
} else if (tok == RCS_TOK_EXPAND) { |
rfp->rf_expand = strdup(RCS_TOKSTR(rfp)); |
rfp->rf_expand = xstrdup(RCS_TOKSTR(rfp)); |
if (rfp->rf_expand == NULL) { |
|
cvs_log(LP_ERRNO, |
|
"failed to duplicate rcs token"); |
|
return (-1); |
|
} |
|
} |
} |
|
|
/* now get the expected semi-colon */ |
/* now get the expected semi-colon */ |
|
|
struct rcs_delta *rdp; |
struct rcs_delta *rdp; |
struct rcs_key *rk; |
struct rcs_key *rk; |
|
|
rdp = (struct rcs_delta *)malloc(sizeof(*rdp)); |
rdp = (struct rcs_delta *)xmalloc(sizeof(*rdp)); |
if (rdp == NULL) { |
|
rcs_errno = RCS_ERR_ERRNO; |
|
cvs_log(LP_ERRNO, "failed to allocate RCS delta structure"); |
|
return (-1); |
|
} |
|
memset(rdp, 0, sizeof(*rdp)); |
memset(rdp, 0, sizeof(*rdp)); |
|
|
rdp->rd_num = rcsnum_alloc(); |
rdp->rd_num = rcsnum_alloc(); |
|
|
} |
} |
|
|
if (tokstr != NULL) |
if (tokstr != NULL) |
free(tokstr); |
xfree(tokstr); |
tokstr = strdup(RCS_TOKSTR(rfp)); |
tokstr = xstrdup(RCS_TOKSTR(rfp)); |
if (tokstr == NULL) { |
|
cvs_log(LP_ERRNO, |
|
"failed to duplicate rcs token"); |
|
rcs_freedelta(rdp); |
|
return (-1); |
|
} |
|
|
|
/* now get the expected semi-colon */ |
/* now get the expected semi-colon */ |
ntok = rcs_gettok(rfp); |
ntok = rcs_gettok(rfp); |
if (ntok != RCS_TOK_SCOLON) { |
if (ntok != RCS_TOK_SCOLON) { |
|
|
cvs_log(LP_ERR, |
cvs_log(LP_ERR, |
"missing semi-colon after RCS `%s' key", |
"missing semi-colon after RCS `%s' key", |
rk->rk_str); |
rk->rk_str); |
free(tokstr); |
xfree(tokstr); |
rcs_freedelta(rdp); |
rcs_freedelta(rdp); |
return (-1); |
return (-1); |
} |
} |
|
|
if (tok == RCS_TOK_DATE) { |
if (tok == RCS_TOK_DATE) { |
if ((datenum = rcsnum_parse(tokstr)) == NULL) { |
if ((datenum = rcsnum_parse(tokstr)) == NULL) { |
free(tokstr); |
xfree(tokstr); |
rcs_freedelta(rdp); |
rcs_freedelta(rdp); |
return (-1); |
return (-1); |
} |
} |
|
|
"fields", |
"fields", |
(datenum->rn_len > 6) ? "too many" : |
(datenum->rn_len > 6) ? "too many" : |
"missing"); |
"missing"); |
free(tokstr); |
xfree(tokstr); |
rcs_freedelta(rdp); |
rcs_freedelta(rdp); |
rcsnum_free(datenum); |
rcsnum_free(datenum); |
return (-1); |
return (-1); |
|
|
} |
} |
|
|
if (tokstr != NULL) |
if (tokstr != NULL) |
free(tokstr); |
xfree(tokstr); |
|
|
TAILQ_INSERT_TAIL(&(rfp->rf_delta), rdp, rd_list); |
TAILQ_INSERT_TAIL(&(rfp->rf_delta), rdp, rd_list); |
rfp->rf_ndelta++; |
rfp->rf_ndelta++; |
|
|
RCS_TOKSTR(rfp)); |
RCS_TOKSTR(rfp)); |
return (-1); |
return (-1); |
} |
} |
rdp->rd_log = strdup(RCS_TOKSTR(rfp)); |
rdp->rd_log = xstrdup(RCS_TOKSTR(rfp)); |
if (rdp->rd_log == NULL) { |
|
cvs_log(LP_ERRNO, "failed to copy RCS deltatext log"); |
|
return (-1); |
|
} |
|
|
|
tok = rcs_gettok(rfp); |
tok = rcs_gettok(rfp); |
if (tok != RCS_TOK_TEXT) { |
if (tok != RCS_TOK_TEXT) { |
rcs_errno = RCS_ERR_PARSE; |
rcs_errno = RCS_ERR_PARSE; |
|
|
return (-1); |
return (-1); |
} |
} |
|
|
rdp->rd_text = (u_char *)malloc(RCS_TOKLEN(rfp) + 1); |
rdp->rd_text = (u_char *)xmalloc(RCS_TOKLEN(rfp) + 1); |
if (rdp->rd_text == NULL) { |
|
cvs_log(LP_ERRNO, "failed to copy RCS delta text"); |
|
return (-1); |
|
} |
|
strlcpy(rdp->rd_text, RCS_TOKSTR(rfp), (RCS_TOKLEN(rfp) + 1)); |
strlcpy(rdp->rd_text, RCS_TOKSTR(rfp), (RCS_TOKLEN(rfp) + 1)); |
rdp->rd_tlen = RCS_TOKLEN(rfp); |
rdp->rd_tlen = RCS_TOKLEN(rfp); |
|
|
|
|
return (-1); |
return (-1); |
} |
} |
|
|
symp = (struct rcs_sym *)malloc(sizeof(*symp)); |
symp = (struct rcs_sym *)xmalloc(sizeof(*symp)); |
if (symp == NULL) { |
symp->rs_name = xstrdup(RCS_TOKSTR(rfp)); |
rcs_errno = RCS_ERR_ERRNO; |
|
cvs_log(LP_ERRNO, "failed to allocate RCS symbol"); |
|
return (-1); |
|
} |
|
symp->rs_name = strdup(RCS_TOKSTR(rfp)); |
|
if (symp->rs_name == NULL) { |
|
cvs_log(LP_ERRNO, "failed to duplicate rcs token"); |
|
free(symp); |
|
return (-1); |
|
} |
|
|
|
symp->rs_num = rcsnum_alloc(); |
symp->rs_num = rcsnum_alloc(); |
if (symp->rs_num == NULL) { |
if (symp->rs_num == NULL) { |
cvs_log(LP_ERRNO, "failed to allocate rcsnum info"); |
cvs_log(LP_ERRNO, "failed to allocate rcsnum info"); |
free(symp->rs_name); |
xfree(symp->rs_name); |
free(symp); |
xfree(symp); |
return (-1); |
return (-1); |
} |
} |
|
|
|
|
cvs_log(LP_ERR, "unexpected token `%s' in symbol list", |
cvs_log(LP_ERR, "unexpected token `%s' in symbol list", |
RCS_TOKSTR(rfp)); |
RCS_TOKSTR(rfp)); |
rcsnum_free(symp->rs_num); |
rcsnum_free(symp->rs_num); |
free(symp->rs_name); |
xfree(symp->rs_name); |
free(symp); |
xfree(symp); |
return (-1); |
return (-1); |
} |
} |
|
|
|
|
cvs_log(LP_ERR, "unexpected token `%s' in symbol list", |
cvs_log(LP_ERR, "unexpected token `%s' in symbol list", |
RCS_TOKSTR(rfp)); |
RCS_TOKSTR(rfp)); |
rcsnum_free(symp->rs_num); |
rcsnum_free(symp->rs_num); |
free(symp->rs_name); |
xfree(symp->rs_name); |
free(symp); |
xfree(symp); |
return (-1); |
return (-1); |
} |
} |
|
|
|
|
cvs_log(LP_ERR, "failed to parse RCS NUM `%s'", |
cvs_log(LP_ERR, "failed to parse RCS NUM `%s'", |
RCS_TOKSTR(rfp)); |
RCS_TOKSTR(rfp)); |
rcsnum_free(symp->rs_num); |
rcsnum_free(symp->rs_num); |
free(symp->rs_name); |
xfree(symp->rs_name); |
free(symp); |
xfree(symp); |
return (-1); |
return (-1); |
} |
} |
|
|
|
|
return (-1); |
return (-1); |
} |
} |
|
|
lkp = (struct rcs_lock *)malloc(sizeof(*lkp)); |
lkp = (struct rcs_lock *)xmalloc(sizeof(*lkp)); |
if (lkp == NULL) { |
lkp->rl_name = xstrdup(RCS_TOKSTR(rfp)); |
cvs_log(LP_ERRNO, "failed to allocate RCS lock"); |
|
return (-1); |
|
} |
|
|
|
if ((lkp->rl_name = strdup(RCS_TOKSTR(rfp))) == NULL) { |
|
cvs_log(LP_ERR, "failed to save locking user"); |
|
free(lkp); |
|
return (-1); |
|
} |
|
|
|
lkp->rl_num = rcsnum_alloc(); |
lkp->rl_num = rcsnum_alloc(); |
if (lkp->rl_num == NULL) { |
if (lkp->rl_num == NULL) { |
free(lkp->rl_name); |
xfree(lkp->rl_name); |
free(lkp); |
xfree(lkp); |
return (-1); |
return (-1); |
} |
} |
|
|
|
|
cvs_log(LP_ERR, "unexpected token `%s' in symbol list", |
cvs_log(LP_ERR, "unexpected token `%s' in symbol list", |
RCS_TOKSTR(rfp)); |
RCS_TOKSTR(rfp)); |
rcsnum_free(lkp->rl_num); |
rcsnum_free(lkp->rl_num); |
free(lkp->rl_name); |
xfree(lkp->rl_name); |
free(lkp); |
xfree(lkp); |
return (-1); |
return (-1); |
} |
} |
|
|
|
|
cvs_log(LP_ERR, "unexpected token `%s' in symbol list", |
cvs_log(LP_ERR, "unexpected token `%s' in symbol list", |
RCS_TOKSTR(rfp)); |
RCS_TOKSTR(rfp)); |
rcsnum_free(lkp->rl_num); |
rcsnum_free(lkp->rl_num); |
free(lkp->rl_name); |
xfree(lkp->rl_name); |
free(lkp); |
xfree(lkp); |
return (-1); |
return (-1); |
} |
} |
|
|
|
|
cvs_log(LP_ERR, "failed to parse RCS NUM `%s'", |
cvs_log(LP_ERR, "failed to parse RCS NUM `%s'", |
RCS_TOKSTR(rfp)); |
RCS_TOKSTR(rfp)); |
rcsnum_free(lkp->rl_num); |
rcsnum_free(lkp->rl_num); |
free(lkp->rl_name); |
xfree(lkp->rl_name); |
free(lkp); |
xfree(lkp); |
return (-1); |
return (-1); |
} |
} |
|
|
|
|
return (-1); |
return (-1); |
} |
} |
|
|
brp = (struct rcs_branch *)malloc(sizeof(*brp)); |
brp = (struct rcs_branch *)xmalloc(sizeof(*brp)); |
if (brp == NULL) { |
|
rcs_errno = RCS_ERR_ERRNO; |
|
cvs_log(LP_ERRNO, "failed to allocate RCS branch"); |
|
return (-1); |
|
} |
|
brp->rb_num = rcsnum_parse(RCS_TOKSTR(rfp)); |
brp->rb_num = rcsnum_parse(RCS_TOKSTR(rfp)); |
if (brp->rb_num == NULL) { |
if (brp->rb_num == NULL) { |
free(brp); |
xfree(brp); |
return (-1); |
return (-1); |
} |
} |
|
|
|
|
rcsnum_free(rdp->rd_next); |
rcsnum_free(rdp->rd_next); |
|
|
if (rdp->rd_author != NULL) |
if (rdp->rd_author != NULL) |
free(rdp->rd_author); |
xfree(rdp->rd_author); |
if (rdp->rd_locker != NULL) |
if (rdp->rd_locker != NULL) |
free(rdp->rd_locker); |
xfree(rdp->rd_locker); |
if (rdp->rd_state != NULL) |
if (rdp->rd_state != NULL) |
free(rdp->rd_state); |
xfree(rdp->rd_state); |
if (rdp->rd_log != NULL) |
if (rdp->rd_log != NULL) |
free(rdp->rd_log); |
xfree(rdp->rd_log); |
if (rdp->rd_text != NULL) |
if (rdp->rd_text != NULL) |
free(rdp->rd_text); |
xfree(rdp->rd_text); |
|
|
while ((rb = TAILQ_FIRST(&(rdp->rd_branches))) != NULL) { |
while ((rb = TAILQ_FIRST(&(rdp->rd_branches))) != NULL) { |
TAILQ_REMOVE(&(rdp->rd_branches), rb, rb_list); |
TAILQ_REMOVE(&(rdp->rd_branches), rb, rb_list); |
rcsnum_free(rb->rb_num); |
rcsnum_free(rb->rb_num); |
free(rb); |
xfree(rb); |
} |
} |
|
|
while ((crdp = TAILQ_FIRST(&(rdp->rd_snodes))) != NULL) { |
while ((crdp = TAILQ_FIRST(&(rdp->rd_snodes))) != NULL) { |
|
|
rcs_freedelta(crdp); |
rcs_freedelta(crdp); |
} |
} |
|
|
free(rdp); |
xfree(rdp); |
} |
} |
|
|
/* |
/* |
|
|
if (pd->rp_file != NULL) |
if (pd->rp_file != NULL) |
(void)fclose(pd->rp_file); |
(void)fclose(pd->rp_file); |
if (pd->rp_buf != NULL) |
if (pd->rp_buf != NULL) |
free(pd->rp_buf); |
xfree(pd->rp_buf); |
free(pd); |
xfree(pd); |
} |
} |
|
|
/* |
/* |
|
|
return (-1); |
return (-1); |
|
|
if (rdp->rd_text != NULL) |
if (rdp->rd_text != NULL) |
free(rdp->rd_text); |
xfree(rdp->rd_text); |
|
|
len = strlen(dtext); |
len = strlen(dtext); |
if (len != 0) { |
if (len != 0) { |
if ((rdp->rd_text = (u_char *)malloc(len)) == NULL) |
rdp->rd_text = (u_char *)xmalloc(len); |
return (-1); |
|
|
|
rdp->rd_tlen = len - 1; |
rdp->rd_tlen = len - 1; |
strlcpy(rdp->rd_text, dtext, len); |
strlcpy(rdp->rd_text, dtext, len); |
} else { |
} else { |
|
|
return (-1); |
return (-1); |
|
|
if (rdp->rd_log != NULL) |
if (rdp->rd_log != NULL) |
free(rdp->rd_log); |
xfree(rdp->rd_log); |
|
|
if ((rdp->rd_log = strdup(logtext)) == NULL) |
rdp->rd_log = xstrdup(logtext); |
return (-1); |
|
|
|
rfp->rf_flags &= ~RCS_SYNCED; |
rfp->rf_flags &= ~RCS_SYNCED; |
return (0); |
return (0); |
} |
} |
|
|
return (-1); |
return (-1); |
|
|
if (rdp->rd_state != NULL) |
if (rdp->rd_state != NULL) |
free(rdp->rd_state); |
xfree(rdp->rd_state); |
|
|
if ((rdp->rd_state = strdup(state)) == NULL) |
rdp->rd_state = xstrdup(state); |
return (-1); |
|
|
|
rfp->rf_flags &= ~RCS_SYNCED; |
rfp->rf_flags &= ~RCS_SYNCED; |
|
|
|
|
if (bp != NULL) |
if (bp != NULL) |
cvs_buf_free(bp); |
cvs_buf_free(bp); |
if (content != NULL) |
if (content != NULL) |
free(content); |
xfree(content); |
|
|
return (ret); |
return (ret); |
} |
} |