static char version
[] = "@(#)inode.c 3.4 (Berkeley) %G%";
register struct inodesc
*idesc
;
idesc
->id_fix
= DONTKNOW
;
ndb
= howmany(dino
.di_size
, sblock
.fs_bsize
);
for (ap
= &dino
.di_db
[0]; ap
< &dino
.di_db
[NDADDR
]; ap
++) {
if (--ndb
== 0 && (offset
= blkoff(&sblock
, dino
.di_size
)) != 0)
numfrags(&sblock
, fragroundup(&sblock
, offset
));
idesc
->id_numfrags
= sblock
.fs_frag
;
if (idesc
->id_type
== ADDR
)
ret
= (*idesc
->id_func
)(idesc
);
idesc
->id_numfrags
= sblock
.fs_frag
;
for (ap
= &dino
.di_ib
[0], n
= 1; n
<= NIADDR
; ap
++, n
++) {
dino
.di_size
- sblock
.fs_bsize
* NDADDR
);
iblock(idesc
, ilevel
, isize
)
int i
, n
, (*func
)(), nif
, sizepb
;
if (idesc
->id_type
== ADDR
) {
if (((n
= (*func
)(idesc
)) & KEEPON
) == 0)
if (outrange(idesc
->id_blkno
, idesc
->id_numfrags
)) /* protect thyself */
if (getblk(&ib
, idesc
->id_blkno
, sblock
.fs_bsize
) == NULL
)
for (sizepb
= sblock
.fs_bsize
, i
= 0; i
< ilevel
; i
++)
sizepb
*= NINDIR(&sblock
);
nif
= isize
/ sizepb
+ 1;
if (nif
> NINDIR(&sblock
))
aplim
= &ib
.b_un
.b_indir
[nif
];
for (ap
= ib
.b_un
.b_indir
, i
= 1; ap
< aplim
; ap
++, i
++)
n
= iblock(idesc
, ilevel
, isize
- i
* sizepb
);
if ((unsigned)(blk
+cnt
) > fmax
)
if (blk
< cgdmin(&sblock
, c
)) {
if ((blk
+cnt
) > cgsblock(&sblock
, c
)) {
printf("blk %d < cgdmin %d;",
blk
, cgdmin(&sblock
, c
));
printf(" blk+cnt %d > cgsbase %d\n",
blk
+cnt
, cgsblock(&sblock
, c
));
if ((blk
+cnt
) > cgbase(&sblock
, c
+1)) {
printf("blk %d >= cgdmin %d;",
blk
, cgdmin(&sblock
, c
));
printf(" blk+cnt %d > sblock.fs_fpg %d\n",
static ino_t startinum
= 0; /* blk num of first in raw area */
if (inumber
< ROOTINO
|| inumber
> imax
)
errexit("bad inode number %d to ginode\n", inumber
);
inumber
< startinum
|| inumber
>= startinum
+ INOPB(&sblock
)) {
iblk
= itod(&sblock
, inumber
);
if (getblk(&inoblk
, iblk
, sblock
.fs_bsize
) == NULL
) {
startinum
= (inumber
/ INOPB(&sblock
)) * INOPB(&sblock
);
return (&inoblk
.b_un
.b_dinode
[inumber
% INOPB(&sblock
)]);
register struct inodesc
*idesc
;
dp
= ginode(idesc
->id_number
);
pwarn("%s %s", s
, DIRCT(dp
) ? "DIR" : "FILE");
pinode(idesc
->id_number
);
if (preen
|| reply("CLEAR") == 1) {
(void)ckinode(dp
, idesc
);
statemap
[idesc
->id_number
] = USTATE
;
register DIRECT
*dirp
= idesc
->id_dirp
;
if (!strcmp(dirp
->d_name
, idesc
->id_name
)) {
if (dirp
->d_ino
>= ROOTINO
&& dirp
->d_ino
<= imax
)
idesc
->id_parent
= dirp
->d_ino
;
if (ino
< ROOTINO
|| ino
> imax
)
if (getpw((int)dp
->di_uid
, uidbuf
) == 0) {
for (p
= uidbuf
; *p
!= ':'; p
++);
printf("%d ", dp
->di_uid
);
printf("MODE=%o\n", dp
->di_mode
);
printf("SIZE=%ld ", dp
->di_size
);
p
= ctime(&dp
->di_mtime
);
printf("MTIME=%12.12s %4.4s ", p
+4, p
+20);
pfatal("%ld %s I=%u", blk
, s
, ino
);
errexit("BAD STATE %d TO BLKERR", statemap
[ino
]);