fname[MAXPATHLEN-1]=0;
l = strlen(fname);
if (fname[l-1] != '/') {
+ if (l == MAXPATHLEN-1) {
+ fprintf(FERROR,"skipping long-named directory %s\n",fname);
+ closedir(d);
+ return;
+ }
strcat(fname,"/");
l++;
}
p = fname + strlen(fname);
if (cvs_exclude) {
- strcpy(p,".cvsignore");
- local_exclude_list = make_exclude_list(fname,NULL,0);
+ if (strlen(fname) + strlen(".cvsignore") <= MAXPATHLEN-1) {
+ strcpy(p,".cvsignore");
+ local_exclude_list = make_exclude_list(fname,NULL,0);
+ } else {
+ fprintf(FERROR,"cannot cvs-exclude in long-named directory %s\n",fname);
+ }
}
for (di=readdir(d); di; di=readdir(d)) {
char dbuf[MAXPATHLEN];
struct file_list *flist;
- if (verbose && recurse && !am_server) {
+ if (verbose && recurse && !am_server && f != -1) {
fprintf(FINFO,"building file list ... ");
fflush(FINFO);
}
write_flush(f);
}
- if (verbose && recurse && !am_server)
+ if (verbose && recurse && !am_server && f != -1)
fprintf(FINFO,"done\n");
clean_flist(flist);
}
-/* we need this function because of the silly way in which duplicate
- entries are handled in the file lists - we can't change this
- without breaking existing versions */
-static int flist_up(struct file_list *flist, int i)
-{
- while (!flist->files[i].name) i++;
- return i;
-}
-
-
int flist_find(struct file_list *flist,struct file_struct *f)
{
int low=0,high=flist->count-1;
if (strncmp(p=name,"./",2) == 0) {
modified = 1;
- while (*p) {
+ do {
p[0] = p[2];
- p++;
- }
+ } while (*p++);
}
l = strlen(p=name);