summaryrefslogtreecommitdiff
path: root/ufs-fsck/pass4.c
diff options
context:
space:
mode:
authorMichael I. Bushnell <mib@gnu.org>1994-10-11 19:08:44 +0000
committerMichael I. Bushnell <mib@gnu.org>1994-10-11 19:08:44 +0000
commit43d7225f44ad7b55051bf452cde5dc71961ac4aa (patch)
tree4d42438e7b4e66586a0b2279979358b463be333e /ufs-fsck/pass4.c
parent2b72c279aaa10cbbe66e0c1f4e05a1137ad71896 (diff)
Initial revision
Diffstat (limited to 'ufs-fsck/pass4.c')
-rw-r--r--ufs-fsck/pass4.c55
1 files changed, 55 insertions, 0 deletions
diff --git a/ufs-fsck/pass4.c b/ufs-fsck/pass4.c
new file mode 100644
index 00000000..69691e4e
--- /dev/null
+++ b/ufs-fsck/pass4.c
@@ -0,0 +1,55 @@
+/* Pass 4 of GNU fsck -- Check reference counts
+ Copyright (C) 1994 Free Software Foundation, Inc.
+ Written by Michael I. Bushnell.
+
+ This file is part of the GNU Hurd.
+
+ The GNU Hurd is free software; you can redistribute it and/or
+ modify it under the terms of the GNU General Public License as
+ published by the Free Software Foundation; either version 2, or (at
+ your option) any later version.
+
+ The GNU Hurd is distributed in the hope that it will be useful, but
+ WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */
+
+pass4()
+{
+ ino_t number;
+
+ for (number = ROOTINO; number < lastino; number++)
+ {
+ /* If it's correct, then there's nothing to do */
+ if (linkcount[number] == linkfound[number]
+ && (!!(inodestate[number] == UNALLOC) == !linkfound[number]))
+
+ if (linkfound[number] && inodestate[number] != UNALLOC)
+ {
+ if (linkcount[number] != linkfound[number])
+ {
+ struct dinode dino;
+ getinode (number, &dino);
+ pwarn ("LINK COUNT %s",
+ (DI_MODE (dp) & IFMT) == IFDIR ? "DIR" : "FILE");
+ pinode (dino);
+ printf (" COUNT %d SHOULD BE %d", linkcount[number],
+ linkfound[number]);
+ if (preen)
+ printf (" (ADJUSTED)");
+ if (preen || reply ("ADJUST"))
+ {
+ dino.di_nlink = linkfound[number];
+ write_inode (number, &dino);
+ }
+ }
+ }
+ else if (inodestate[number
+ {
+
+
+