diff options
author | Michael I. Bushnell <mib@gnu.org> | 1994-10-11 19:08:44 +0000 |
---|---|---|
committer | Michael I. Bushnell <mib@gnu.org> | 1994-10-11 19:08:44 +0000 |
commit | 6040005f491d7e4719fbe3bd5b115f3f1999f8fc (patch) | |
tree | 5b74cce161837dbde7448198456142a893e1f855 /ufs-fsck/pass4.c | |
parent | 98936db7451b56c5085f2eef070127984577faae (diff) |
Initial revision
Diffstat (limited to 'ufs-fsck/pass4.c')
-rw-r--r-- | ufs-fsck/pass4.c | 55 |
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 + { + + + |