version 1.130, 2006/02/26 16:06:46 |
version 1.131, 2006/03/05 14:18:56 |
|
|
static int rcs_growbuf(RCSFILE *); |
static int rcs_growbuf(RCSFILE *); |
static int rcs_strprint(const u_char *, size_t, FILE *); |
static int rcs_strprint(const u_char *, size_t, FILE *); |
|
|
static char* rcs_expand_keywords(char *, struct rcs_delta *, char *, |
static char* rcs_expand_keywords(char *, struct rcs_delta *, char *, |
size_t, int); |
size_t, int); |
|
|
/* |
/* |
|
|
BUF* |
BUF* |
rcs_getrev(RCSFILE *rfp, RCSNUM *frev) |
rcs_getrev(RCSFILE *rfp, RCSNUM *frev) |
{ |
{ |
int expmode, res; |
int res; |
size_t len; |
size_t len; |
void *bp; |
void *bp; |
RCSNUM *crev, *rev; |
RCSNUM *crev, *rev; |
BUF *rbuf; |
BUF *rbuf; |
struct rcs_delta *rdp = NULL; |
struct rcs_delta *rdp = NULL; |
char *expanded; /* XXX */ |
|
|
|
if (rfp->rf_head == NULL) |
if (rfp->rf_head == NULL) |
return (NULL); |
return (NULL); |
|
|
if (cvs_buf_getc(rbuf, cvs_buf_len(rbuf)-1) != '\n' |
if (cvs_buf_getc(rbuf, cvs_buf_len(rbuf)-1) != '\n' |
&& rbuf != NULL) |
&& rbuf != NULL) |
cvs_buf_putc(rbuf, '\n'); |
cvs_buf_putc(rbuf, '\n'); |
/* |
|
* Do keyword expansion if required. |
|
*/ |
|
if (rfp->rf_expand != NULL) |
|
expmode = rcs_kwexp_get(rfp); |
|
else |
|
expmode = RCS_KWEXP_DEFAULT; |
|
|
|
if ((rbuf != NULL) && !(expmode & RCS_KWEXP_NONE)) { |
|
if ((rdp = rcs_findrev(rfp, rev)) == NULL) |
|
return (rbuf); |
|
cvs_buf_putc(rbuf, '\0'); |
|
len = cvs_buf_len(rbuf); |
|
bp = cvs_buf_release(rbuf); |
|
expanded = rcs_expand_keywords(rfp->rf_path, rdp, |
|
bp, len, expmode); |
|
rbuf = cvs_buf_alloc(len, BUF_AUTOEXT); |
|
cvs_buf_set(rbuf, expanded, strlen(expanded), 0); |
|
xfree(expanded); |
|
} |
|
|
|
return (rbuf); |
return (rbuf); |
} |
} |
|
|
|
|
return (rdp->rd_state); |
return (rdp->rd_state); |
} |
} |
|
|
|
/* |
|
* rcs_kwexp_buf() |
|
* |
|
* Do keyword expansion on a buffer if necessary |
|
* |
|
*/ |
|
BUF * |
|
rcs_kwexp_buf(BUF *bp, RCSFILE *rf, RCSNUM *rev) |
|
{ |
|
struct rcs_delta *rdp; |
|
char *expanded, *tbuf; |
|
int expmode; |
|
size_t len; |
|
|
|
/* |
|
* Do keyword expansion if required. |
|
*/ |
|
if (rf->rf_expand != NULL) |
|
expmode = rcs_kwexp_get(rf); |
|
else |
|
expmode = RCS_KWEXP_DEFAULT; |
|
|
|
if (!(expmode & RCS_KWEXP_NONE)) { |
|
if ((rdp = rcs_findrev(rf, rev)) == NULL) |
|
fatal("could not fetch revision"); |
|
cvs_buf_putc(bp, '\0'); |
|
len = cvs_buf_len(bp); |
|
tbuf = cvs_buf_release(bp); |
|
expanded = rcs_expand_keywords(rf->rf_path, rdp, |
|
tbuf, len, expmode); |
|
bp = cvs_buf_alloc(len, BUF_AUTOEXT); |
|
cvs_buf_set(bp, expanded, strlen(expanded), 0); |
|
xfree(expanded); |
|
} |
|
return (bp); |
|
} |
|
|
|
|
#if !defined(RCSPROG) |
#if !defined(RCSPROG) |
|
|
static char *month_tab[] = { |
static char *month_tab[] = { |
|
|
rcsnum_tostr(rev, buf, sizeof(buf)), fpath); |
rcsnum_tostr(rev, buf, sizeof(buf)), fpath); |
goto out; |
goto out; |
} |
} |
|
bp = rcs_kwexp_buf(bp, rf, rev); |
} else if (type != CHECKOUT_REV_REMOVED) { |
} else if (type != CHECKOUT_REV_REMOVED) { |
va_start(ap, type); |
va_start(ap, type); |
bp = va_arg(ap, BUF *); |
bp = va_arg(ap, BUF *); |