summaryrefslogtreecommitdiffstats
path: root/sbin/fsck_ifs/pass1.c
diff options
context:
space:
mode:
authorpeter <peter@FreeBSD.org>1997-03-11 12:20:21 +0000
committerpeter <peter@FreeBSD.org>1997-03-11 12:20:21 +0000
commitac28da2dc002612b2fd129500af8084d63aa8504 (patch)
tree8cadfc9709953ec63a6c3fe257fe499055b9f832 /sbin/fsck_ifs/pass1.c
parent683ee3c015f8c8071f4de0e2cd952c8643315c98 (diff)
downloadFreeBSD-src-ac28da2dc002612b2fd129500af8084d63aa8504.zip
FreeBSD-src-ac28da2dc002612b2fd129500af8084d63aa8504.tar.gz
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.
Diffstat (limited to 'sbin/fsck_ifs/pass1.c')
-rw-r--r--sbin/fsck_ifs/pass1.c44
1 files changed, 24 insertions, 20 deletions
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 <sys/param.h>
#include <sys/time.h>
+
#include <ufs/ufs/dinode.h>
#include <ufs/ufs/dir.h>
#include <ufs/ffs/fs.h>
+
#include <stdio.h>
#include <stdlib.h>
+#include <err.h>
#include <string.h>
+
#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;
OpenPOWER on IntegriCloud