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

« back to all changes in this revision

Viewing changes to lib/libufs/inode.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) 2002 Juli Mallett.  All rights reserved.
 
3
 *
 
4
 * This software was written by Juli Mallett <jmallett@FreeBSD.org> for the
 
5
 * FreeBSD project.  Redistribution and use in source and binary forms, with
 
6
 * or without modification, are permitted provided that the following
 
7
 * conditions are met:
 
8
 *
 
9
 * 1. Redistribution of source code must retain the above copyright notice,
 
10
 *    this list of conditions and the following disclaimer.
 
11
 * 2. Redistribution in binary form must reproduce the above copyright
 
12
 *    notice, this list of conditions and the following disclaimer in the
 
13
 *    documentation and/or other materials provided with the distribution.
 
14
 *
 
15
 * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
 
16
 * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
 
17
 * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
 
18
 * DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT,
 
19
 * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
 
20
 * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
 
21
 * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
 
22
 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
 
23
 * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
 
24
 * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
 
25
 * POSSIBILITY OF SUCH DAMAGE.
 
26
 */
 
27
 
 
28
#include <sys/cdefs.h>
 
29
__FBSDID("$FreeBSD$");
 
30
 
 
31
#include <sys/param.h>
 
32
#include <sys/mount.h>
 
33
#include <sys/disklabel.h>
 
34
#include <sys/stat.h>
 
35
 
 
36
#include <ufs/ufs/ufsmount.h>
 
37
#include <ufs/ufs/dinode.h>
 
38
#include <ufs/ffs/fs.h>
 
39
 
 
40
#include <errno.h>
 
41
#include <fcntl.h>
 
42
#include <stdio.h>
 
43
#include <stdlib.h>
 
44
#include <string.h>
 
45
#include <unistd.h>
 
46
 
 
47
#include <libufs.h>
 
48
 
 
49
int
 
50
getino(struct uufsd *disk, void **dino, ino_t inode, int *mode)
 
51
{
 
52
        ino_t min, max;
 
53
        caddr_t inoblock;
 
54
        struct ufs1_dinode *dp1;
 
55
        struct ufs2_dinode *dp2;
 
56
        struct fs *fs;
 
57
 
 
58
        ERROR(disk, NULL);
 
59
 
 
60
        fs = &disk->d_fs;
 
61
        inoblock = disk->d_inoblock;
 
62
        min = disk->d_inomin;
 
63
        max = disk->d_inomax;
 
64
 
 
65
        if (inoblock == NULL) {
 
66
                inoblock = malloc(fs->fs_bsize);
 
67
                if (inoblock == NULL) {
 
68
                        ERROR(disk, "unable to allocate inode block");
 
69
                        return (-1);
 
70
                }
 
71
                disk->d_inoblock = inoblock;
 
72
        }
 
73
        if (inode >= min && inode < max)
 
74
                goto gotit;
 
75
        bread(disk, fsbtodb(fs, ino_to_fsba(fs, inode)), inoblock,
 
76
            fs->fs_bsize);
 
77
        disk->d_inomin = min = inode - (inode % INOPB(fs));
 
78
        disk->d_inomax = max = min + INOPB(fs);
 
79
gotit:  switch (disk->d_ufs) {
 
80
        case 1:
 
81
                dp1 = &((struct ufs1_dinode *)inoblock)[inode - min];
 
82
                *mode = dp1->di_mode & IFMT;
 
83
                *dino = dp1;
 
84
                return (0);
 
85
        case 2:
 
86
                dp2 = &((struct ufs2_dinode *)inoblock)[inode - min];
 
87
                *mode = dp2->di_mode & IFMT;
 
88
                *dino = dp2;
 
89
                return (0);
 
90
        default:
 
91
                break;
 
92
        }
 
93
        ERROR(disk, "unknown UFS filesystem type");
 
94
        return (-1);
 
95
}