version 1.98, 2005/11/09 15:42:58 |
version 1.99, 2005/11/12 21:34:48 |
|
|
#include "log.h" |
#include "log.h" |
#include "rcs.h" |
#include "rcs.h" |
#include "diff.h" |
#include "diff.h" |
#include "strtab.h" |
|
|
|
#define RCS_BUFSIZE 16384 |
#define RCS_BUFSIZE 16384 |
#define RCS_BUFEXTSIZE 8192 |
#define RCS_BUFEXTSIZE 8192 |
|
|
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); |
cvs_strfree(rap->ra_name); |
free(rap->ra_name); |
free(rap); |
free(rap); |
} |
} |
|
|
|
|
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); |
cvs_strfree(rsp->rs_name); |
free(rsp->rs_name); |
free(rsp); |
free(rsp); |
} |
} |
|
|
|
|
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); |
cvs_strfree(rlp->rl_name); |
free(rlp->rl_name); |
free(rlp); |
free(rlp); |
} |
} |
|
|
|
|
if (rfp->rf_path != NULL) |
if (rfp->rf_path != NULL) |
free(rfp->rf_path); |
free(rfp->rf_path); |
if (rfp->rf_comment != NULL) |
if (rfp->rf_comment != NULL) |
cvs_strfree(rfp->rf_comment); |
free(rfp->rf_comment); |
if (rfp->rf_expand != NULL) |
if (rfp->rf_expand != NULL) |
cvs_strfree(rfp->rf_expand); |
free(rfp->rf_expand); |
if (rfp->rf_desc != NULL) |
if (rfp->rf_desc != NULL) |
cvs_strfree(rfp->rf_desc); |
free(rfp->rf_desc); |
free(rfp); |
free(rfp); |
} |
} |
|
|
|
|
return (-1); |
return (-1); |
} |
} |
|
|
ap->ra_name = cvs_strdup(login); |
ap->ra_name = strdup(login); |
if (ap->ra_name == NULL) { |
if (ap->ra_name == NULL) { |
cvs_log(LP_ERRNO, "failed to duplicate user name"); |
cvs_log(LP_ERRNO, "failed to duplicate user name"); |
free(ap); |
free(ap); |
|
|
} |
} |
|
|
TAILQ_REMOVE(&(file->rf_access), ap, ra_list); |
TAILQ_REMOVE(&(file->rf_access), ap, ra_list); |
cvs_strfree(ap->ra_name); |
free(ap->ra_name); |
free(ap); |
free(ap); |
|
|
/* not synced anymore */ |
/* not synced anymore */ |
|
|
return (-1); |
return (-1); |
} |
} |
|
|
if ((symp->rs_name = cvs_strdup(sym)) == NULL) { |
if ((symp->rs_name = strdup(sym)) == NULL) { |
rcs_errno = RCS_ERR_ERRNO; |
rcs_errno = RCS_ERR_ERRNO; |
cvs_log(LP_ERRNO, "failed to duplicate symbol"); |
cvs_log(LP_ERRNO, "failed to duplicate symbol"); |
free(symp); |
free(symp); |
|
|
} |
} |
|
|
if ((symp->rs_num = rcsnum_alloc()) == NULL) { |
if ((symp->rs_num = rcsnum_alloc()) == NULL) { |
cvs_strfree(symp->rs_name); |
free(symp->rs_name); |
free(symp); |
free(symp); |
return (-1); |
return (-1); |
} |
} |
|
|
} |
} |
|
|
TAILQ_REMOVE(&(file->rf_symbols), symp, rs_list); |
TAILQ_REMOVE(&(file->rf_symbols), symp, rs_list); |
cvs_strfree(symp->rs_name); |
free(symp->rs_name); |
rcsnum_free(symp->rs_num); |
rcsnum_free(symp->rs_num); |
free(symp); |
free(symp); |
|
|
|
|
return (-1); |
return (-1); |
} |
} |
|
|
lkp->rl_name = cvs_strdup(user); |
lkp->rl_name = strdup(user); |
if (lkp->rl_name == NULL) { |
if (lkp->rl_name == NULL) { |
cvs_log(LP_ERRNO, "failed to duplicate user name"); |
cvs_log(LP_ERRNO, "failed to duplicate user name"); |
free(lkp); |
free(lkp); |
|
|
} |
} |
|
|
if ((lkp->rl_num = rcsnum_alloc()) == NULL) { |
if ((lkp->rl_num = rcsnum_alloc()) == NULL) { |
cvs_strfree(lkp->rl_name); |
free(lkp->rl_name); |
free(lkp); |
free(lkp); |
return (-1); |
return (-1); |
} |
} |
|
|
|
|
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); |
cvs_strfree(lkp->rl_name); |
free(lkp->rl_name); |
free(lkp); |
free(lkp); |
|
|
/* not synced anymore */ |
/* not synced anymore */ |
|
|
{ |
{ |
char *tmp; |
char *tmp; |
|
|
if ((tmp = cvs_strdup(desc)) == NULL) |
if ((tmp = strdup(desc)) == NULL) |
return (-1); |
return (-1); |
|
|
if (file->rf_desc != NULL) |
if (file->rf_desc != NULL) |
cvs_strfree(file->rf_desc); |
free(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 = cvs_strdup(comment)) == NULL) |
if ((tmp = strdup(comment)) == NULL) |
return (-1); |
return (-1); |
|
|
if (file->rf_comment != NULL) |
if (file->rf_comment != NULL) |
cvs_strfree(file->rf_comment); |
free(file->rf_comment); |
file->rf_comment = tmp; |
file->rf_comment = tmp; |
file->rf_flags &= ~RCS_SYNCED; |
file->rf_flags &= ~RCS_SYNCED; |
|
|
|
|
if (username == NULL) |
if (username == NULL) |
username = pw->pw_name; |
username = pw->pw_name; |
|
|
if ((rdp->rd_author = cvs_strdup(username)) == NULL) { |
if ((rdp->rd_author = strdup(username)) == NULL) { |
rcs_freedelta(rdp); |
rcs_freedelta(rdp); |
rcsnum_free(old); |
rcsnum_free(old); |
return (-1); |
return (-1); |
} |
} |
|
|
if ((rdp->rd_state = cvs_strdup(RCS_STATE_EXP)) == NULL) { |
if ((rdp->rd_state = strdup(RCS_STATE_EXP)) == NULL) { |
rcs_freedelta(rdp); |
rcs_freedelta(rdp); |
rcsnum_free(old); |
rcsnum_free(old); |
return (-1); |
return (-1); |
} |
} |
|
|
if ((rdp->rd_log = cvs_strdup(msg)) == NULL) { |
if ((rdp->rd_log = strdup(msg)) == NULL) { |
rcs_errno = RCS_ERR_ERRNO; |
rcs_errno = RCS_ERR_ERRNO; |
rcs_freedelta(rdp); |
rcs_freedelta(rdp); |
rcsnum_free(old); |
rcsnum_free(old); |
|
|
buf[i++] = 'l'; |
buf[i++] = 'l'; |
} |
} |
|
|
if ((tmp = cvs_strdup(buf)) == NULL) { |
if ((tmp = strdup(buf)) == NULL) { |
cvs_log(LP_ERRNO, "%s: failed to copy expansion mode", |
cvs_log(LP_ERRNO, "%s: failed to copy expansion mode", |
file->rf_path); |
file->rf_path); |
return (-1); |
return (-1); |
} |
} |
|
|
if (file->rf_expand != NULL) |
if (file->rf_expand != NULL) |
cvs_strfree(file->rf_expand); |
free(file->rf_expand); |
file->rf_expand = tmp; |
file->rf_expand = tmp; |
/* not synced anymore */ |
/* not synced anymore */ |
file->rf_flags &= ~RCS_SYNCED; |
file->rf_flags &= ~RCS_SYNCED; |
|
|
return (-1); |
return (-1); |
} |
} |
|
|
rfp->rf_desc = cvs_strdup(RCS_TOKSTR(rfp)); |
rfp->rf_desc = strdup(RCS_TOKSTR(rfp)); |
if (rfp->rf_desc == NULL) { |
if (rfp->rf_desc == NULL) { |
cvs_log(LP_ERRNO, "failed to duplicate rcs token"); |
cvs_log(LP_ERRNO, "failed to duplicate rcs token"); |
rcs_freepdata(pdp); |
rcs_freepdata(pdp); |
|
|
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 = cvs_strdup(RCS_TOKSTR(rfp)); |
rfp->rf_comment = strdup(RCS_TOKSTR(rfp)); |
if (rfp->rf_comment == NULL) { |
if (rfp->rf_comment == NULL) { |
cvs_log(LP_ERRNO, |
cvs_log(LP_ERRNO, |
"failed to duplicate rcs token"); |
"failed to duplicate rcs token"); |
return (-1); |
return (-1); |
} |
} |
} else if (tok == RCS_TOK_EXPAND) { |
} else if (tok == RCS_TOK_EXPAND) { |
rfp->rf_expand = cvs_strdup(RCS_TOKSTR(rfp)); |
rfp->rf_expand = strdup(RCS_TOKSTR(rfp)); |
if (rfp->rf_expand == NULL) { |
if (rfp->rf_expand == NULL) { |
cvs_log(LP_ERRNO, |
cvs_log(LP_ERRNO, |
"failed to duplicate rcs token"); |
"failed to duplicate rcs token"); |
|
|
} |
} |
|
|
if (tokstr != NULL) |
if (tokstr != NULL) |
cvs_strfree(tokstr); |
free(tokstr); |
tokstr = cvs_strdup(RCS_TOKSTR(rfp)); |
tokstr = strdup(RCS_TOKSTR(rfp)); |
if (tokstr == NULL) { |
if (tokstr == NULL) { |
cvs_log(LP_ERRNO, |
cvs_log(LP_ERRNO, |
"failed to duplicate rcs token"); |
"failed to duplicate rcs token"); |
|
|
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); |
cvs_strfree(tokstr); |
free(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) { |
cvs_strfree(tokstr); |
free(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"); |
cvs_strfree(tokstr); |
free(tokstr); |
rcs_freedelta(rdp); |
rcs_freedelta(rdp); |
rcsnum_free(datenum); |
rcsnum_free(datenum); |
return (-1); |
return (-1); |
|
|
} |
} |
|
|
if (tokstr != NULL) |
if (tokstr != NULL) |
cvs_strfree(tokstr); |
free(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 = cvs_strdup(RCS_TOKSTR(rfp)); |
rdp->rd_log = strdup(RCS_TOKSTR(rfp)); |
if (rdp->rd_log == NULL) { |
if (rdp->rd_log == NULL) { |
cvs_log(LP_ERRNO, "failed to copy RCS deltatext log"); |
cvs_log(LP_ERRNO, "failed to copy RCS deltatext log"); |
return (-1); |
return (-1); |
|
|
cvs_log(LP_ERRNO, "failed to allocate RCS symbol"); |
cvs_log(LP_ERRNO, "failed to allocate RCS symbol"); |
return (-1); |
return (-1); |
} |
} |
symp->rs_name = cvs_strdup(RCS_TOKSTR(rfp)); |
symp->rs_name = strdup(RCS_TOKSTR(rfp)); |
if (symp->rs_name == NULL) { |
if (symp->rs_name == NULL) { |
cvs_log(LP_ERRNO, "failed to duplicate rcs token"); |
cvs_log(LP_ERRNO, "failed to duplicate rcs token"); |
free(symp); |
free(symp); |
|
|
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"); |
cvs_strfree(symp->rs_name); |
free(symp->rs_name); |
free(symp); |
free(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); |
cvs_strfree(symp->rs_name); |
free(symp->rs_name); |
free(symp); |
free(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); |
cvs_strfree(symp->rs_name); |
free(symp->rs_name); |
free(symp); |
free(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); |
cvs_strfree(symp->rs_name); |
free(symp->rs_name); |
free(symp); |
free(symp); |
return (-1); |
return (-1); |
} |
} |
|
|
return (-1); |
return (-1); |
} |
} |
|
|
if ((lkp->rl_name = cvs_strdup(RCS_TOKSTR(rfp))) == NULL) { |
if ((lkp->rl_name = strdup(RCS_TOKSTR(rfp))) == NULL) { |
cvs_log(LP_ERR, "failed to save locking user"); |
cvs_log(LP_ERR, "failed to save locking user"); |
free(lkp); |
free(lkp); |
return (-1); |
return (-1); |
|
|
|
|
lkp->rl_num = rcsnum_alloc(); |
lkp->rl_num = rcsnum_alloc(); |
if (lkp->rl_num == NULL) { |
if (lkp->rl_num == NULL) { |
cvs_strfree(lkp->rl_name); |
free(lkp->rl_name); |
free(lkp); |
free(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); |
cvs_strfree(lkp->rl_name); |
free(lkp->rl_name); |
free(lkp); |
free(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); |
cvs_strfree(lkp->rl_name); |
free(lkp->rl_name); |
free(lkp); |
free(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); |
cvs_strfree(lkp->rl_name); |
free(lkp->rl_name); |
free(lkp); |
free(lkp); |
return (-1); |
return (-1); |
} |
} |
|
|
rcsnum_free(rdp->rd_next); |
rcsnum_free(rdp->rd_next); |
|
|
if (rdp->rd_author != NULL) |
if (rdp->rd_author != NULL) |
cvs_strfree(rdp->rd_author); |
free(rdp->rd_author); |
if (rdp->rd_state != NULL) |
if (rdp->rd_state != NULL) |
cvs_strfree(rdp->rd_state); |
free(rdp->rd_state); |
if (rdp->rd_log != NULL) |
if (rdp->rd_log != NULL) |
cvs_strfree(rdp->rd_log); |
free(rdp->rd_log); |
if (rdp->rd_text != NULL) |
if (rdp->rd_text != NULL) |
free(rdp->rd_text); |
free(rdp->rd_text); |
|
|
|
|
return (-1); |
return (-1); |
|
|
if (rdp->rd_log != NULL) |
if (rdp->rd_log != NULL) |
cvs_strfree(rdp->rd_log); |
free(rdp->rd_log); |
|
|
if ((rdp->rd_log = cvs_strdup(logtext)) == NULL) |
if ((rdp->rd_log = strdup(logtext)) == NULL) |
return (-1); |
return (-1); |
|
|
rfp->rf_flags &= ~RCS_SYNCED; |
rfp->rf_flags &= ~RCS_SYNCED; |
|
|
return (-1); |
return (-1); |
|
|
if (rdp->rd_state != NULL) |
if (rdp->rd_state != NULL) |
cvs_strfree(rdp->rd_state); |
free(rdp->rd_state); |
|
|
if ((rdp->rd_state = cvs_strdup(state)) == NULL) |
if ((rdp->rd_state = strdup(state)) == NULL) |
return (-1); |
return (-1); |
|
|
rfp->rf_flags &= ~RCS_SYNCED; |
rfp->rf_flags &= ~RCS_SYNCED; |