summaryrefslogtreecommitdiffstats
path: root/sbin/fsck_ifs/pass1.c
diff options
context:
space:
mode:
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