projects
/
unix-history
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
tags
|
clone url
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
timeval => timespec
[unix-history]
/
usr
/
src
/
sbin
/
fsck
/
pass4.c
diff --git
a/usr/src/sbin/fsck/pass4.c
b/usr/src/sbin/fsck/pass4.c
index
bd485d6
..
41a6e40
100644
(file)
--- a/
usr/src/sbin/fsck/pass4.c
+++ b/
usr/src/sbin/fsck/pass4.c
@@
-1,19
+1,31
@@
+/*
+ * Copyright (c) 1980, 1986 The Regents of the University of California.
+ * All rights reserved.
+ *
+ * %sccs.include.redist.c%
+ */
+
#ifndef lint
#ifndef lint
-static char
version[] = "@(#)pass4.c 3.
2 (Berkeley) %G%";
-#endif
+static char
sccsid[] = "@(#)pass4.c 5.1
2 (Berkeley) %G%";
+#endif
/* not lint */
#include <sys/param.h>
#include <sys/param.h>
-#include <sys/inode.h>
-#include <sys/fs.h>
+#include <sys/time.h>
+#include <ufs/ufs/dinode.h>
+#include <ufs/ffs/fs.h>
+#include <stdlib.h>
+#include <string.h>
#include "fsck.h"
int pass4check();
pass4()
{
#include "fsck.h"
int pass4check();
pass4()
{
- register ino_t inumber, *blp;
- int n;
+ register ino_t inumber;
+ register struct zlncnt *zlnp;
+ struct dinode *dp;
struct inodesc idesc;
struct inodesc idesc;
+ int n;
bzero((char *)&idesc, sizeof(struct inodesc));
idesc.id_type = ADDR;
bzero((char *)&idesc, sizeof(struct inodesc));
idesc.id_type = ADDR;
@@
-28,8
+40,12
@@
pass4()
if (n)
adjust(&idesc, (short)n);
else {
if (n)
adjust(&idesc, (short)n);
else {
- for (blp = badlncnt;blp < badlnp; blp++)
- if (*blp == inumber) {
+ for (zlnp = zlnhead; zlnp; zlnp = zlnp->next)
+ if (zlnp->zlncnt == inumber) {
+ zlnp->zlncnt = zlnhead->zlncnt;
+ zlnp = zlnhead;
+ zlnhead = zlnhead->next;
+ free((char *)zlnp);
clri(&idesc, "UNREF", 1);
break;
}
clri(&idesc, "UNREF", 1);
break;
}
@@
-41,9
+57,22
@@
pass4()
break;
case DCLEAR:
break;
case DCLEAR:
+ dp = ginode(inumber);
+ if (dp->di_size == 0) {
+ clri(&idesc, "ZERO LENGTH", 1);
+ break;
+ }
+ /* fall through */
case FCLEAR:
clri(&idesc, "BAD/DUP", 1);
break;
case FCLEAR:
clri(&idesc, "BAD/DUP", 1);
break;
+
+ case USTATE:
+ break;
+
+ default:
+ errexit("BAD STATE %d FOR INODE I=%d",
+ statemap[inumber], inumber);
}
}
}
}
}
}
@@
-51,21
+80,27
@@
pass4()
pass4check(idesc)
register struct inodesc *idesc;
{
pass4check(idesc)
register struct inodesc *idesc;
{
- register
daddr_t
*dlp;
+ register
struct dups
*dlp;
int nfrags, res = KEEPON;
daddr_t blkno = idesc->id_blkno;
for (nfrags = idesc->id_numfrags; nfrags > 0; blkno++, nfrags--) {
int nfrags, res = KEEPON;
daddr_t blkno = idesc->id_blkno;
for (nfrags = idesc->id_numfrags; nfrags > 0; blkno++, nfrags--) {
- if (
outrange(blkno, 1))
+ if (
chkrange(blkno, 1)) {
res = SKIP;
res = SKIP;
- else if (getbmap(blkno)) {
- for (dlp = duplist; dlp < enddup; dlp++)
- if (*dlp == blkno) {
- *dlp = *--enddup;
- return (KEEPON);
- }
- clrbmap(blkno);
- n_blks--;
+ } else if (testbmap(blkno)) {
+ for (dlp = duplist; dlp; dlp = dlp->next) {
+ if (dlp->dup != blkno)
+ continue;
+ dlp->dup = duplist->dup;
+ dlp = duplist;
+ duplist = duplist->next;
+ free((char *)dlp);
+ break;
+ }
+ if (dlp == 0) {
+ clrbmap(blkno);
+ n_blks--;
+ }
}
}
return (res);
}
}
return (res);