Lines Matching refs:idesc
151 dirscan(struct inodesc *idesc) in dirscan() argument
162 if (idesc->id_type != DATA) in dirscan()
163 errexit("wrong type to dirscan %d", idesc->id_type); in dirscan()
164 if (idesc->id_entryno == 0 && in dirscan()
165 (idesc->id_filesize & (sblock.e2fs_bsize - 1)) != 0) in dirscan()
166 idesc->id_filesize = roundup(idesc->id_filesize, sblock.e2fs_bsize); in dirscan()
167 blksiz = idesc->id_numfrags * sblock.e2fs_bsize; in dirscan()
168 if (chkrange(idesc->id_blkno, idesc->id_numfrags)) { in dirscan()
169 idesc->id_filesize -= blksiz; in dirscan()
173 idesc->id_loc = 0; in dirscan()
174 for (dp = fsck_readdir(idesc); dp != NULL; dp = fsck_readdir(idesc)) { in dirscan()
177 idesc->id_dirp = (struct ext2fs_direct *)dbuf; in dirscan()
178 if ((n = (*idesc->id_func)(idesc)) & ALTERED) { in dirscan()
179 bp = getdirblk(idesc->id_blkno, blksiz); in dirscan()
180 memcpy(bp->b_un.b_buf + idesc->id_loc - dsize, dbuf, in dirscan()
191 return (idesc->id_filesize > 0 ? KEEPON : STOP); in dirscan()
198 fsck_readdir(struct inodesc *idesc) in fsck_readdir() argument
204 blksiz = idesc->id_numfrags * sblock.e2fs_bsize; in fsck_readdir()
205 bp = getdirblk(idesc->id_blkno, blksiz); in fsck_readdir()
206 if (idesc->id_loc % sblock.e2fs_bsize == 0 && idesc->id_filesize > 0 && in fsck_readdir()
207 idesc->id_loc < blksiz) { in fsck_readdir()
208 dp = (struct ext2fs_direct *)(bp->b_un.b_buf + idesc->id_loc); in fsck_readdir()
209 if (dircheck(idesc, dp)) in fsck_readdir()
211 if (idesc->id_fix == IGNORE) in fsck_readdir()
213 fix = dofix(idesc, "DIRECTORY CORRUPTED"); in fsck_readdir()
214 bp = getdirblk(idesc->id_blkno, blksiz); in fsck_readdir()
215 dp = (struct ext2fs_direct *)(bp->b_un.b_buf + idesc->id_loc); in fsck_readdir()
223 idesc->id_loc += sblock.e2fs_bsize; in fsck_readdir()
224 idesc->id_filesize -= sblock.e2fs_bsize; in fsck_readdir()
228 if (idesc->id_filesize <= 0 || idesc->id_loc >= blksiz) in fsck_readdir()
230 dploc = idesc->id_loc; in fsck_readdir()
232 idesc->id_loc += fs2h16(dp->e2d_reclen); in fsck_readdir()
233 idesc->id_filesize -= fs2h16(dp->e2d_reclen); in fsck_readdir()
234 if ((idesc->id_loc % sblock.e2fs_bsize) == 0) in fsck_readdir()
236 ndp = (struct ext2fs_direct *)(bp->b_un.b_buf + idesc->id_loc); in fsck_readdir()
237 if (idesc->id_loc < blksiz && idesc->id_filesize > 0 && in fsck_readdir()
238 dircheck(idesc, ndp) == 0) { in fsck_readdir()
239 size = sblock.e2fs_bsize - (idesc->id_loc % sblock.e2fs_bsize); in fsck_readdir()
240 idesc->id_loc += size; in fsck_readdir()
241 idesc->id_filesize -= size; in fsck_readdir()
242 if (idesc->id_fix == IGNORE) in fsck_readdir()
244 fix = dofix(idesc, "DIRECTORY CORRUPTED"); in fsck_readdir()
245 bp = getdirblk(idesc->id_blkno, blksiz); in fsck_readdir()
259 dircheck(struct inodesc *idesc, struct ext2fs_direct *dp) in dircheck() argument
266 spaceleft = sblock.e2fs_bsize - (idesc->id_loc % sblock.e2fs_bsize); in dircheck()
280 idesc->id_filesize < size /* || in dircheck()
319 adjust(struct inodesc *idesc, short lcnt) in adjust() argument
323 dp = ginode(idesc->id_number); in adjust()
325 if (linkup(idesc->id_number, (ino_t)0) == 0) in adjust()
326 clri(idesc, "UNREF", 0); in adjust()
328 pwarn("LINK COUNT %s", (lfdir == idesc->id_number) ? lfname : in adjust()
330 pinode(idesc->id_number); in adjust()
348 mkentry(struct inodesc *idesc) in mkentry() argument
350 struct ext2fs_direct *dirp = idesc->id_dirp; in mkentry()
355 newent.e2d_namlen = strlen(idesc->id_name); in mkentry()
358 newent.e2d_type = inot2ext2dt(typemap[idesc->id_parent]); in mkentry()
369 dirp->e2d_ino = h2fs32(idesc->id_parent); /* ino to be entered is in id_parent */ in mkentry()
373 memcpy(dirp->e2d_name, idesc->id_name, (size_t)(dirp->e2d_namlen)); in mkentry()
378 chgino(struct inodesc *idesc) in chgino() argument
380 struct ext2fs_direct *dirp = idesc->id_dirp; in chgino()
383 if (strlen(idesc->id_name) != namlen || in chgino()
384 strncmp(dirp->e2d_name, idesc->id_name, (int)namlen)) in chgino()
386 dirp->e2d_ino = h2fs32(idesc->id_parent); in chgino()
389 dirp->e2d_type = inot2ext2dt(typemap[idesc->id_parent]); in chgino()
401 struct inodesc idesc; in linkup() local
404 memset(&idesc, 0, sizeof(struct inodesc)); in linkup()
418 idesc.id_name = lfname; in linkup()
419 idesc.id_type = DATA; in linkup()
420 idesc.id_func = findino; in linkup()
421 idesc.id_number = EXT2_ROOTINO; in linkup()
422 if ((ckinode(dp, &idesc) & FOUND) != 0) { in linkup()
423 lfdir = idesc.id_parent; in linkup()
462 idesc.id_type = ADDR; in linkup()
463 idesc.id_func = pass4check; in linkup()
464 idesc.id_number = oldlfdir; in linkup()
465 adjust(&idesc, lncntp[oldlfdir] + 1); in linkup()
504 struct inodesc idesc; in changeino() local
506 memset(&idesc, 0, sizeof(struct inodesc)); in changeino()
507 idesc.id_type = DATA; in changeino()
508 idesc.id_func = chgino; in changeino()
509 idesc.id_number = dir; in changeino()
510 idesc.id_fix = DONTKNOW; in changeino()
511 idesc.id_name = name; in changeino()
512 idesc.id_parent = newnum; /* new value for name */ in changeino()
513 return (ckinode(ginode(dir), &idesc)); in changeino()
523 struct inodesc idesc; in makeentry() local
530 memset(&idesc, 0, sizeof(struct inodesc)); in makeentry()
531 idesc.id_type = DATA; in makeentry()
532 idesc.id_func = mkentry; in makeentry()
533 idesc.id_number = parent; in makeentry()
534 idesc.id_parent = ino; /* this is the inode to enter */ in makeentry()
535 idesc.id_fix = DONTKNOW; in makeentry()
536 idesc.id_name = name; in makeentry()
542 if ((ckinode(dp, &idesc) & ALTERED) != 0) in makeentry()
548 return (ckinode(dp, &idesc) & ALTERED); in makeentry()