=================================================================== RCS file: /cvsrepo/anoncvs/cvs/src/usr.bin/cvs/file.c,v retrieving revision 1.10 retrieving revision 1.11 diff -c -r1.10 -r1.11 *** src/usr.bin/cvs/file.c 2004/07/29 16:59:39 1.10 --- src/usr.bin/cvs/file.c 2004/07/29 17:31:23 1.11 *************** *** 1,4 **** ! /* $OpenBSD: file.c,v 1.10 2004/07/29 16:59:39 jfb Exp $ */ /* * Copyright (c) 2004 Jean-Francois Brousseau * All rights reserved. --- 1,4 ---- ! /* $OpenBSD: file.c,v 1.11 2004/07/29 17:31:23 jfb Exp $ */ /* * Copyright (c) 2004 Jean-Francois Brousseau * All rights reserved. *************** *** 87,92 **** --- 87,96 ---- }; + /* + * Entries in the CVS/Entries file with a revision of '0' have only been + * added. Compare against this revision to see if this is the case + */ static RCSNUM *cvs_addedrev; *************** *** 409,415 **** int nf, ret, fd; long base; void *dp, *ep, *tmp; ! char fbuf[1024], pbuf[MAXPATHLEN]; struct dirent *ent; struct cvs_file *cfp; struct cvs_dir *cdp; --- 413,419 ---- int nf, ret, fd; long base; void *dp, *ep, *tmp; ! char fbuf[2048], pbuf[MAXPATHLEN]; struct dirent *ent; struct cvs_file *cfp; struct cvs_dir *cdp; *************** *** 438,472 **** cvs_file_freedir(cdp); return (-1); } - ret = getdirentries(fd, fbuf, sizeof(fbuf), &base); - if (ret == -1) { - cvs_log(LP_ERRNO, "failed to get directory entries"); - (void)close(fd); - cvs_file_freedir(cdp); - return (-1); - } ! dp = fbuf; ! ep = fbuf + (size_t)ret; ! while (dp < ep) { ! ent = (struct dirent *)dp; ! dp += ent->d_reclen; ! if ((flags & CF_IGNORE) && cvs_file_chkign(ent->d_name)) ! continue; ! snprintf(pbuf, sizeof(pbuf), "%s/%s", cf->cf_path, ent->d_name); ! cfp = cvs_file_get(pbuf, flags); ! if (cfp != NULL) { ! cfp->cf_parent = cf; ! if (cfp->cf_type == DT_DIR) ! TAILQ_INSERT_HEAD(&dirs, cfp, cf_list); ! else ! TAILQ_INSERT_HEAD(&(cdp->cd_files), cfp, ! cf_list); } ! } if (flags & CF_SORT) { cvs_file_sort(&(cdp->cd_files)); --- 442,479 ---- cvs_file_freedir(cdp); return (-1); } ! do { ! ret = getdirentries(fd, fbuf, sizeof(fbuf), &base); ! if (ret == -1) { ! cvs_log(LP_ERRNO, "failed to get directory entries"); ! (void)close(fd); ! cvs_file_freedir(cdp); ! return (-1); ! } ! dp = fbuf; ! ep = fbuf + (size_t)ret; ! while (dp < ep) { ! ent = (struct dirent *)dp; ! dp += ent->d_reclen; ! if ((flags & CF_IGNORE) && cvs_file_chkign(ent->d_name)) ! continue; ! snprintf(pbuf, sizeof(pbuf), "%s/%s", ! cf->cf_path, ent->d_name); ! cfp = cvs_file_get(pbuf, flags); ! if (cfp != NULL) { ! cfp->cf_parent = cf; ! if (cfp->cf_type == DT_DIR) ! TAILQ_INSERT_HEAD(&dirs, cfp, cf_list); ! else ! TAILQ_INSERT_HEAD(&(cdp->cd_files), cfp, ! cf_list); ! } } ! } while (ret > 0); if (flags & CF_SORT) { cvs_file_sort(&(cdp->cd_files));