~ubuntu-branches/debian/jessie/ufsutils/jessie

« back to all changes in this revision

Viewing changes to sbin/fsck_ffs/pass1b.c

  • Committer: Bazaar Package Importer
  • Author(s): Guillem Jover, Robert Millan, Guillem Jover, Peter Pentchev
  • Date: 2011-05-31 03:50:05 UTC
  • mfrom: (1.1.4 upstream)
  • Revision ID: james.westby@ubuntu.com-20110531035005-wyiyk25p99ivd0k0
Tags: 8.2-1
[ Robert Millan ]
* Set ufsutils-udeb to kfreebsd-any.

[ Guillem Jover ]
* New upstream version (based on FreeBSD 8.2)
* Now using Standards-Version 3.9.2 (no changes needed).
* Switch to source format “3.0 (quilt)”.
  - Remove quilt from Build-Depends.
  - Remove patch target in debian/rules.
  - Remove now unneeded README.source.
  - Refresh all patches.
* Reorganize source code:
  - Switch from debian/upstream.sh to debian/rules get-orig-source target.
  - Switch from CVS to Subversion to retrieve the source code.
  - Use the same source layout as upstream (no more relocations),
    i.e. lib/, sbin/, sys/sys, sys/ufs.
  - Move libport/ to port/.
  - Merge libdisklabel/ into port/.
* Remove unneeded linking against libtermcap, thus removing the need for
  ncurses.
* Add an empty debian/watch file explaining that there's no packaged
  upstream releases. Suggested by Peter Pentchev.
* Update CVS to Subversion reference to upstream source code in
  debian/copyright.
* Remove unused lib variable from debian/rules.
* Use dpkg-buildflags to set CPPFLAGS, CFLAGS and LDFLAGS.
  Based on a patch by Peter Pentchev.
* Remove bogus reference to BSD license in /usr/share/common-licenses.
* Always set -I../../sys, even on GNU/kFreeBSD systems.

[ Peter Pentchev ]
* Remove duplicate section “utils” from ufsutils binary package.
* Remove XC- prefix from Package-Type.
* Honour CPPFLAGS and LDFLAGS and do not link with CFLAGS.

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
/*
 
2
 * Copyright (c) 1980, 1986, 1993
 
3
 *      The Regents of the University of California.  All rights reserved.
 
4
 *
 
5
 * Redistribution and use in source and binary forms, with or without
 
6
 * modification, are permitted provided that the following conditions
 
7
 * are met:
 
8
 * 1. Redistributions of source code must retain the above copyright
 
9
 *    notice, this list of conditions and the following disclaimer.
 
10
 * 2. Redistributions in binary form must reproduce the above copyright
 
11
 *    notice, this list of conditions and the following disclaimer in the
 
12
 *    documentation and/or other materials provided with the distribution.
 
13
 * 4. Neither the name of the University nor the names of its contributors
 
14
 *    may be used to endorse or promote products derived from this software
 
15
 *    without specific prior written permission.
 
16
 *
 
17
 * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
 
18
 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
 
19
 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
 
20
 * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
 
21
 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
 
22
 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
 
23
 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
 
24
 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
 
25
 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
 
26
 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
 
27
 * SUCH DAMAGE.
 
28
 */
 
29
 
 
30
#if 0
 
31
#ifndef lint
 
32
static const char sccsid[] = "@(#)pass1b.c      8.4 (Berkeley) 4/28/95";
 
33
#endif /* not lint */
 
34
#endif
 
35
#include <sys/cdefs.h>
 
36
__FBSDID("$FreeBSD$");
 
37
 
 
38
#include <sys/param.h>
 
39
 
 
40
#include <ufs/ufs/dinode.h>
 
41
#include <ufs/ffs/fs.h>
 
42
 
 
43
#include <string.h>
 
44
 
 
45
#include "fsck.h"
 
46
 
 
47
static  struct dups *duphead;
 
48
static int pass1bcheck(struct inodesc *);
 
49
 
 
50
void
 
51
pass1b(void)
 
52
{
 
53
        int c, i;
 
54
        union dinode *dp;
 
55
        struct inodesc idesc;
 
56
        ino_t inumber;
 
57
 
 
58
        memset(&idesc, 0, sizeof(struct inodesc));
 
59
        idesc.id_type = ADDR;
 
60
        idesc.id_func = pass1bcheck;
 
61
        duphead = duplist;
 
62
        inumber = 0;
 
63
        for (c = 0; c < sblock.fs_ncg; c++) {
 
64
                if (got_siginfo) {
 
65
                        printf("%s: phase 1b: cyl group %d of %d (%d%%)\n",
 
66
                            cdevname, c, sblock.fs_ncg,
 
67
                            c * 100 / sblock.fs_ncg);
 
68
                        got_siginfo = 0;
 
69
                }
 
70
                if (got_sigalarm) {
 
71
                        setproctitle("%s p1b %d%%", cdevname,
 
72
                            c * 100 / sblock.fs_ncg);
 
73
                        got_sigalarm = 0;
 
74
                }
 
75
                for (i = 0; i < sblock.fs_ipg; i++, inumber++) {
 
76
                        if (inumber < ROOTINO)
 
77
                                continue;
 
78
                        dp = ginode(inumber);
 
79
                        if (dp == NULL)
 
80
                                continue;
 
81
                        idesc.id_number = inumber;
 
82
                        if (inoinfo(inumber)->ino_state != USTATE &&
 
83
                            (ckinode(dp, &idesc) & STOP))
 
84
                                return;
 
85
                }
 
86
        }
 
87
}
 
88
 
 
89
static int
 
90
pass1bcheck(struct inodesc *idesc)
 
91
{
 
92
        struct dups *dlp;
 
93
        int nfrags, res = KEEPON;
 
94
        ufs2_daddr_t blkno = idesc->id_blkno;
 
95
 
 
96
        for (nfrags = idesc->id_numfrags; nfrags > 0; blkno++, nfrags--) {
 
97
                if (chkrange(blkno, 1))
 
98
                        res = SKIP;
 
99
                for (dlp = duphead; dlp; dlp = dlp->next) {
 
100
                        if (dlp->dup == blkno) {
 
101
                                blkerror(idesc->id_number, "DUP", blkno);
 
102
                                dlp->dup = duphead->dup;
 
103
                                duphead->dup = blkno;
 
104
                                duphead = duphead->next;
 
105
                        }
 
106
                        if (dlp == muldup)
 
107
                                break;
 
108
                }
 
109
                if (muldup == 0 || duphead == muldup->next)
 
110
                        return (STOP);
 
111
        }
 
112
        return (res);
 
113
}