Index: pass1.c =================================================================== RCS file: /usr/ncvs/src/sbin/fsck_ffs/pass1.c,v retrieving revision 1.31 diff -c -r1.31 pass1.c *** pass1.c 2002/06/26 18:34:47 1.31 --- pass1.c 2002/07/17 23:49:15 *************** *** 191,197 **** ufs2_daddr_t ndb; mode_t mode; char *symbuf; ! int j; dp = getnextinode(inumber); mode = DIP(dp, di_mode) & IFMT; --- 191,197 ---- ufs2_daddr_t ndb; mode_t mode; char *symbuf; ! int j, ret, offset; dp = getnextinode(inumber); mode = DIP(dp, di_mode) & IFMT; *************** *** 330,335 **** --- 330,353 ---- else idesc->id_type = ADDR; (void)ckinode(dp, idesc); + if (sblock.fs_magic == FS_UFS2_MAGIC && dp->dp2.di_extsize > 0) { + idesc->id_type = ADDR; + ndb = howmany(dp->dp2.di_extsize, sblock.fs_bsize); + for (j = 0; j < NXADDR; j++) { + if (--ndb == 0 && + (offset = blkoff(&sblock, dp->dp2.di_extsize)) != 0) + idesc->id_numfrags = numfrags(&sblock, + fragroundup(&sblock, offset)); + else + idesc->id_numfrags = sblock.fs_frag; + if (dp->dp2.di_extb[j] == 0) + continue; + idesc->id_blkno = dp->dp2.di_extb[j]; + ret = (*idesc->id_func)(idesc); + if (ret & STOP) + break; + } + } idesc->id_entryno *= btodb(sblock.fs_fsize); if (DIP(dp, di_blocks) != idesc->id_entryno) { pwarn("INCORRECT BLOCK COUNT I=%lu (%qu should be %qu)",