static char *sccsid
= "@(#)icheck.c 4.1 (Berkeley) 10/1/80";
struct dinode itab
[INOPB
*NI
];
fi
= open(file
, sflg
?2:0);
printf("cannot open %s\n", file
);
bread((daddr_t
)1, (char *)&sblock
, sizeof(sblock
));
mino
= ((int)sblock
.s_isize
-2) * INOPB
;
n
= (sblock
.s_fsize
- (int)sblock
.s_isize
+ BITS
-1) / BITS
;
printf("Check fsize and isize: %ld, %u\n",
sblock
.s_fsize
, (int)sblock
.s_isize
);
bmap
= malloc((unsigned)n
);
printf("Not enough core; duplicates unchecked\n");
for(i
=0; i
<(unsigned)n
; i
++)
bread((daddr_t
)i
, (char *)itab
, sizeof(itab
));
for(j
=0; j
<INOPB
*NI
; j
++) {
bread((daddr_t
)1, (char *)&sblock
, sizeof(sblock
));
i
= nrfile
+ ndfile
+ ncfile
+ nbfile
;
printf("files %6u (r=%u,d=%u,b=%u,c=%u)\n",
i
, nrfile
, ndfile
, nbfile
, ncfile
);
printf("files %u (r=%u,d=%u,b=%u,c=%u)\n",
i
, nrfile
, ndfile
, nbfile
, ncfile
);
n
= ndirect
+ nindir
+ niindir
+ niiindir
;
printf("used %ld (i=%ld,ii=%ld,iii=%ld,d=%ld)\n",
n
, nindir
, niindir
, niiindir
, ndirect
);
printf("free %ld\n", nfree
);
printf("used %7ld (i=%ld,ii=%ld,iii=%ld,d=%ld)\n",
n
, nindir
, niindir
, niiindir
, ndirect
);
printf("free %7ld\n", nfree
);
for(d
=(int)sblock
.s_isize
; d
<sblock
.s_fsize
; d
++)
printf("%ld missing\n", d
);
printf("missing%5ld\n", n
);
register struct dinode
*ip
;
printf("bad mode %u\n", ino
);
l3tol(iaddr
, ip
->di_addr
, NADDR
);
chk(iaddr
[i
], "data (small)");
if (chk(iaddr
[i
], "1st indirect"))
bread(iaddr
[i
], (char *)ind1
, BSIZE
);
for(j
=0; j
<NINDIR
; j
++) {
chk(ind1
[j
], "data (large)");
if(chk(ind1
[j
], "2nd indirect"))
bread(ind1
[j
], (char *)ind2
, BSIZE
);
for(k
=0; k
<NINDIR
; k
++) {
chk(ind2
[k
], "data (huge)");
if(chk(ind2
[k
], "3rd indirect"))
bread(ind2
[k
], (char *)ind3
, BSIZE
);
chk(ind3
[l
], "data (garg)");
if (bno
<(int)sblock
.s_isize
|| bno
>=sblock
.s_fsize
) {
printf("%ld bad; inode=%u, class=%s\n", bno
, ino
, s
);
printf("%ld dup; inode=%u, class=%s\n", bno
, ino
, s
);
for (n
=0; blist
[n
] != -1; n
++)
printf("%ld arg; inode=%u, class=%s\n", bno
, ino
, s
);
d
= bno
- (int)sblock
.s_isize
;
if (sblock
.s_nfree
>NICFREE
) {
printf("Bad free list, s.b. count = %d\n", sblock
.s_nfree
);
bno
= sblock
.s_free
[--sblock
.s_nfree
];
sblock
.s_free
[sblock
.s_nfree
] = (daddr_t
)0;
if(sblock
.s_nfree
<= 0) {
bread(bno
, buf
.data
, BSIZE
);
sblock
.s_nfree
= buf
.df_nfree
;
if (sblock
.s_nfree
<0 || sblock
.s_nfree
>NICFREE
) {
printf("Bad free list, entry count of block %ld = %d\n",
sblock
.s_free
[i
] = buf
.df_free
[i
];
if(sblock
.s_nfree
>= NICFREE
) {
buf
.df_nfree
= sblock
.s_nfree
;
buf
.df_free
[i
] = sblock
.s_free
[i
];
sblock
.s_free
[sblock
.s_nfree
] = bno
;
if (read(fi
, buf
, cnt
) != cnt
) {
printf("read error %ld\n", bno
);
if (write(fi
, buf
, BSIZE
) != BSIZE
)
printf("write error %ld\n", bno
);
if(m
<= 0 || m
> sblock
.s_n
)
for(; d
> 0; d
-= sblock
.s_n
)
for(i
=0; i
<sblock
.s_n
; i
++) {
if(f
< sblock
.s_fsize
&& f
>= (int)sblock
.s_isize
)
bwrite((daddr_t
)1, (char *)&sblock
);