- if(BIT(ino, nodmap))
- return;
- nsubdir = 0;
- dadded = 0;
- filesize = ip->di_size;
- for (i = 0; i < NDADDR; i++) {
- if (ip->di_db[i] != 0)
- dsrch(ip->di_db[i], dblksize(sblock, ip, i), filesize);
- filesize -= sblock->fs_bsize;
- }
- for (i = 0; i < NIADDR; i++) {
- if (ip->di_ib[i] != 0)
- indir(ip->di_ib[i], i, &filesize);
- }
- if(dadded) {
- nadded++;
- if (!BIT(ino, nodmap)) {
- BIS(ino, nodmap);
- est(ip);
+ for (map = dumpdirmap, ino = 0; ino < maxino; ) {
+ if ((ino % NBBY) == 0)
+ bits = *map++;
+ else
+ bits >>= 1;
+ ino++;
+ if ((bits & 1) == 0 || TSTINO(ino, dumpinomap))
+ continue;
+ dp = getino(ino);
+ filesize = dp->di_size;
+ for (ret = 0, i = 0; filesize > 0 && i < NDADDR; i++) {
+ if (dp->di_db[i] != 0)
+ ret |= searchdir(ino, dp->di_db[i],
+ dblksize(sblock, dp, i), filesize);
+ if (ret & HASDUMPEDFILE)
+ filesize = 0;
+ else
+ filesize -= sblock->fs_bsize;
+ }
+ for (i = 0; filesize > 0 && i < NIADDR; i++) {
+ if (dp->di_ib[i] == 0)
+ continue;
+ ret |= dirindir(ino, dp->di_ib[i], i, &filesize);
+ }
+ if (ret & HASDUMPEDFILE) {
+ if (!TSTINO(ino, dumpinomap)) {
+ SETINO(ino, dumpinomap);
+ *tapesize += blockest(dp);
+ }
+ change = 1;
+ continue;
+ }
+ if ((ret & HASSUBDIRS) == 0) {
+ if (!TSTINO(ino, dumpinomap)) {
+ CLRINO(ino, dumpdirmap);
+ change = 1;
+ }