* dcheck - check directory consistency
#define NDIR (BSIZE/sizeof(struct direct))
struct dinode itab
[INOPB
*NI
];
printf("Bad flag %c\n", (*argv
)[1]);
printf("cannot open %s\n", file
);
bread((daddr_t
)1, (char *)&sblock
, sizeof(sblock
));
nfiles
= (sblock
.s_isize
-2)*INOPB
;
printf("Only doing 40000 files\n");
ecount
= malloc(nfiles
+1);
printf("Not enough core\n");
for (i
=0; i
<=nfiles
; i
++)
bread((daddr_t
)i
, (char *)itab
, sizeof(itab
));
for(j
=0; j
<INOPB
*NI
; j
++) {
bread((daddr_t
)i
, (char *)itab
, sizeof(itab
));
for(j
=0; j
<INOPB
*NI
; j
++) {
register struct dinode
*ip
;
struct direct dbuf
[NDIR
];
if((ip
->di_mode
&IFMT
) != IFDIR
)
l3tol(iaddr
, ip
->di_addr
, NADDR
);
bread(d
, (char *)dbuf
, BSIZE
);
doff
+= sizeof(struct direct
);
if(kno
> nfiles
|| kno
<= 1) {
printf("%5u bad; %u/%.14s\n", kno
, ino
, dp
->d_name
);
for (k
=0; ilist
[k
] != 0; k
++)
printf("%5u arg; %u/%.14s\n", kno
, ino
, dp
->d_name
);
register struct dinode
*ip
;
if ((ip
->di_mode
&IFMT
)==0 && ecount
[i
]==0)
if (ip
->di_nlink
==((ecount
[i
])&0377) && ip
->di_nlink
!=0)
printf(" entries link cnt\n");
printf("%u %d %d\n", ino
,
ecount
[i
]&0377, ip
->di_nlink
);
if (read(fi
, buf
, cnt
) != cnt
) {
printf("read error %d\n", bno
);
printf("%u - huge directory\n", ino
);
bread(iaddr
[NADDR
-3], (char *)ibuf
, sizeof(ibuf
));