From ac28da2dc002612b2fd129500af8084d63aa8504 Mon Sep 17 00:00:00 2001 From: peter Date: Tue, 11 Mar 1997 12:20:21 +0000 Subject: Merge from Lite2. Note that Lite2 has it's own filesystem clean check skipping code that overrides ours sooner. One should be eliminated, but for now it works. --- sbin/fsck_ifs/pass1.c | 44 ++++++++++++++++++++++++-------------------- 1 file changed, 24 insertions(+), 20 deletions(-) (limited to 'sbin/fsck_ifs/pass1.c') diff --git a/sbin/fsck_ifs/pass1.c b/sbin/fsck_ifs/pass1.c index 3fec63a..0114c5e 100644 --- a/sbin/fsck_ifs/pass1.c +++ b/sbin/fsck_ifs/pass1.c @@ -32,23 +32,27 @@ */ #ifndef lint -static const char sccsid[] = "@(#)pass1.c 8.1 (Berkeley) 6/5/93"; +static const char sccsid[] = "@(#)pass1.c 8.6 (Berkeley) 4/28/95"; #endif /* not lint */ #include #include + #include #include #include + #include #include +#include #include + #include "fsck.h" -static daddr_t badblk; -static daddr_t dupblk; +static ufs_daddr_t badblk; +static ufs_daddr_t dupblk; -static void checkinode __P((ino_t inumber, struct inodesc *idesc)); +static void checkinode __P((ino_t inumber, struct inodesc *)); void pass1() @@ -73,7 +77,7 @@ pass1() /* * Find all allocated blocks. */ - bzero((char *)&idesc, sizeof(struct inodesc)); + memset(&idesc, 0, sizeof(struct inodesc)); idesc.id_type = ADDR; idesc.id_func = pass1check; inumber = 0; @@ -89,7 +93,7 @@ pass1() freeinodebuf(); } -void +static void checkinode(inumber, idesc) ino_t inumber; register struct inodesc *idesc; @@ -103,10 +107,10 @@ checkinode(inumber, idesc) dp = getnextinode(inumber); mode = dp->di_mode & IFMT; if (mode == 0) { - if (bcmp((char *)dp->di_db, (char *)zino.di_db, - NDADDR * sizeof(daddr_t)) || - bcmp((char *)dp->di_ib, (char *)zino.di_ib, - NIADDR * sizeof(daddr_t)) || + if (memcmp(dp->di_db, zino.di_db, + NDADDR * sizeof(ufs_daddr_t)) || + memcmp(dp->di_ib, zino.di_ib, + NIADDR * sizeof(ufs_daddr_t)) || dp->di_mode || dp->di_size) { pfatal("PARTIALLY ALLOCATED INODE I=%lu", inumber); if (reply("CLEAR") == 1) { @@ -120,7 +124,8 @@ checkinode(inumber, idesc) } lastino = inumber; if (/* dp->di_size < 0 || */ - dp->di_size + sblock.fs_bsize - 1 < dp->di_size) { + dp->di_size + sblock.fs_bsize - 1 < dp->di_size /* || + (mode == IFDIR && dp->di_size > MAXDIRSIZE) */) { if (debug) printf("bad size %qu:", dp->di_size); goto unknown; @@ -148,15 +153,14 @@ checkinode(inumber, idesc) if (bread(fsreadfd, symbuf, fsbtodb(&sblock, dp->di_db[0]), (long)secsize) != 0) - errexit("cannot read symlink"); + errx(EEXIT, "cannot read symlink"); if (debug) { symbuf[dp->di_size] = 0; printf("convert symlink %ld(%s) of size %ld\n", inumber, symbuf, (long)dp->di_size); } dp = ginode(inumber); - bcopy(symbuf, (caddr_t)dp->di_shortlink, - (long)dp->di_size); + memmove(dp->di_shortlink, symbuf, (long)dp->di_size); dp->di_blocks = 0; inodirty(); } @@ -165,7 +169,7 @@ checkinode(inumber, idesc) * will detect any garbage after symlink string. */ if ((dp->di_size < sblock.fs_maxsymlinklen) || dp->di_blocks == 0) { - ndb = howmany(dp->di_size, sizeof(daddr_t)); + ndb = howmany(dp->di_size, sizeof(ufs_daddr_t)); if (ndb > NDADDR) { j = ndb - NDADDR; for (ndb = 1; j > 1; j--) @@ -198,7 +202,7 @@ checkinode(inumber, idesc) if (zlnp == NULL) { pfatal("LINK COUNT TABLE OVERFLOW"); if (reply("CONTINUE") == 0) - errexit(""); + exit(EEXIT); } else { zlnp->zlncnt = inumber; zlnp->next = zlnhead; @@ -256,7 +260,7 @@ pass1check(idesc) { int res = KEEPON; int anyout, nfrags; - daddr_t blkno = idesc->id_blkno; + ufs_daddr_t blkno = idesc->id_blkno; register struct dups *dlp; struct dups *new; @@ -268,7 +272,7 @@ pass1check(idesc) if (preen) printf(" (SKIPPING)\n"); else if (reply("CONTINUE") == 0) - errexit(""); + exit(EEXIT); return (STOP); } } @@ -286,14 +290,14 @@ pass1check(idesc) if (preen) printf(" (SKIPPING)\n"); else if (reply("CONTINUE") == 0) - errexit(""); + exit(EEXIT); return (STOP); } new = (struct dups *)malloc(sizeof(struct dups)); if (new == NULL) { pfatal("DUP TABLE OVERFLOW."); if (reply("CONTINUE") == 0) - errexit(""); + exit(EEXIT); return (STOP); } new->dup = blkno; -- cgit v1.1