version 1.30, 2006/04/12 08:23:30 |
version 1.31, 2006/04/13 00:58:25 |
|
|
#include "rcsprog.h" |
#include "rcsprog.h" |
#include "diff.h" |
#include "diff.h" |
|
|
static void rcsclean_file(char *, RCSNUM *); |
static void rcsclean_file(char *, const char *); |
|
|
static int nflag = 0; |
static int nflag = 0; |
static int kflag = RCS_KWEXP_ERR; |
static int kflag = RCS_KWEXP_ERR; |
|
|
while ((dp = readdir(dirp)) != NULL) { |
while ((dp = readdir(dirp)) != NULL) { |
if (dp->d_type == DT_DIR) |
if (dp->d_type == DT_DIR) |
continue; |
continue; |
rcs_set_rev(rev_str, &rev); |
rcsclean_file(dp->d_name, rev_str); |
rcsclean_file(dp->d_name, rev); |
|
rcsnum_free(rev); |
|
} |
} |
|
|
closedir(dirp); |
closedir(dirp); |
} else |
} else |
for (i = 0; i < argc; i++) { |
for (i = 0; i < argc; i++) |
rcs_set_rev(rev_str, &rev); |
rcsclean_file(argv[i], rev_str); |
rcsclean_file(argv[i], rev); |
|
rcsnum_free(rev); |
|
} |
|
|
|
return (0); |
return (0); |
} |
} |
|
|
} |
} |
|
|
static void |
static void |
rcsclean_file(char *fname, RCSNUM *rev) |
rcsclean_file(char *fname, const char *rev_str) |
{ |
{ |
int match; |
int match; |
RCSFILE *file; |
RCSFILE *file; |
char fpath[MAXPATHLEN], numb[64]; |
char fpath[MAXPATHLEN], numb[64]; |
RCSNUM *frev; |
RCSNUM *rev; |
BUF *b1, *b2; |
BUF *b1, *b2; |
char *s1, *s2, *c1, *c2; |
char *c1, *c2; |
struct stat st; |
struct stat st; |
time_t rcs_mtime = -1; |
time_t rcs_mtime = -1; |
|
|
|
|
|
|
rcs_kwexp_set(file, kflag); |
rcs_kwexp_set(file, kflag); |
|
|
if (rev == RCS_HEAD_REV) |
if (rev_str == NULL) |
frev = file->rf_head; |
rev = file->rf_head; |
else |
else if ((rev = rcs_getrevnum(rev_str, file)) == NULL) { |
frev = rev; |
cvs_log(LP_ERR, "%s: Symbolic name `%s' is undefined.", |
|
fpath, rev_str); |
|
rcs_close(file); |
|
return; |
|
} |
|
|
if ((b1 = rcs_getrev(file, frev)) == NULL) { |
if ((b1 = rcs_getrev(file, rev)) == NULL) { |
cvs_log(LP_ERR, "failed to get needed revision"); |
cvs_log(LP_ERR, "failed to get needed revision"); |
rcs_close(file); |
rcs_close(file); |
return; |
return; |
|
|
c1 = cvs_buf_release(b1); |
c1 = cvs_buf_release(b1); |
c2 = cvs_buf_release(b2); |
c2 = cvs_buf_release(b2); |
|
|
for (s1 = c1, s2 = c2; *s1 && *s2; s1++, s2++) { |
/* XXX - Compare using cvs_buf_len() first. */ |
if (*s1 != *s2) { |
if (strcmp(c1, c2) != 0) |
match = 0; |
match = 0; |
break; |
|
} |
|
} |
|
|
|
xfree(c1); |
xfree(c1); |
xfree(c2); |
xfree(c2); |
|
|
if ((uflag == 1) && (!TAILQ_EMPTY(&(file->rf_locks)))) { |
if ((uflag == 1) && (!TAILQ_EMPTY(&(file->rf_locks)))) { |
if ((verbose == 1) && (nflag == 0)) { |
if ((verbose == 1) && (nflag == 0)) { |
printf("rcs -u%s %s\n", |
printf("rcs -u%s %s\n", |
rcsnum_tostr(frev, numb, sizeof(numb)), |
rcsnum_tostr(rev, numb, sizeof(numb)), |
fpath); |
fpath); |
} |
} |
(void)rcs_lock_remove(file, locker, frev); |
(void)rcs_lock_remove(file, locker, rev); |
} |
} |
|
|
if (TAILQ_EMPTY(&(file->rf_locks))) { |
if (TAILQ_EMPTY(&(file->rf_locks))) { |