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 | 43d7225f44ad7b55051bf452cde5dc71961ac4aa (patch) | |
tree | 4d42438e7b4e66586a0b2279979358b463be333e /ufs-fsck | |
parent | 2b72c279aaa10cbbe66e0c1f4e05a1137ad71896 (diff) |
Initial revision
Diffstat (limited to 'ufs-fsck')
-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 + { + + + |