~ubuntu-branches/ubuntu/hoary/xfsprogs/hoary

« back to all changes in this revision

Viewing changes to db/inode.c

  • Committer: Bazaar Package Importer
  • Author(s): Nathan Scott
  • Date: 2004-07-28 21:11:38 UTC
  • Revision ID: james.westby@ubuntu.com-20040728211138-0v4pdnunnp7na5lm
Tags: 2.6.20-1
* New upstream release.
* Fix xfs_io segfault on non-XFS files.  (closes: #260470)
* Fix packaging botch, deleted files included.  (closes: #260491)

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
1
/*
2
 
 * Copyright (c) 2000 Silicon Graphics, Inc.  All Rights Reserved.
3
 
 * 
 
2
 * Copyright (c) 2000-2001 Silicon Graphics, Inc.  All Rights Reserved.
 
3
 *
4
4
 * This program is free software; you can redistribute it and/or modify it
5
5
 * under the terms of version 2 of the GNU General Public License as
6
6
 * published by the Free Software Foundation.
7
 
 * 
 
7
 *
8
8
 * This program is distributed in the hope that it would be useful, but
9
9
 * WITHOUT ANY WARRANTY; without even the implied warranty of
10
10
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
11
 
 * 
 
11
 *
12
12
 * Further, this software is distributed without any warranty that it is
13
13
 * free of the rightful claim of any third person regarding infringement
14
14
 * or the like.  Any license provided herein, whether implied or
15
15
 * otherwise, applies only to this software file.  Patent licenses, if
16
16
 * any, provided herein do not apply to combinations of this program with
17
17
 * other software, or any other product whatsoever.
18
 
 * 
 
18
 *
19
19
 * You should have received a copy of the GNU General Public License along
20
20
 * with this program; if not, write the Free Software Foundation, Inc., 59
21
21
 * Temple Place - Suite 330, Boston MA 02111-1307, USA.
22
 
 * 
 
22
 *
23
23
 * Contact information: Silicon Graphics, Inc., 1600 Amphitheatre Pkwy,
24
24
 * Mountain View, CA  94043, or:
25
 
 * 
26
 
 * http://www.sgi.com 
27
 
 * 
28
 
 * For further information regarding this notice, see: 
29
 
 * 
 
25
 *
 
26
 * http://www.sgi.com
 
27
 *
 
28
 * For further information regarding this notice, see:
 
29
 *
30
30
 * http://oss.sgi.com/projects/GenInfo/SGIGPLNoticeExplan/
31
31
 */
32
32
 
33
 
#include <libxfs.h>
 
33
#include <xfs/libxfs.h>
34
34
#include "command.h"
35
 
#include "data.h"
36
35
#include "type.h"
37
36
#include "faddr.h"
38
37
#include "fprint.h"
43
42
#include "block.h"
44
43
#include "bit.h"
45
44
#include "output.h"
46
 
#include "mount.h"
 
45
#include "init.h"
47
46
 
48
47
static int      inode_a_bmbt_count(void *obj, int startoff);
49
48
static int      inode_a_bmx_count(void *obj, int startoff);
100
99
          FLD_COUNT, TYP_NONE },
101
100
        { "uid", FLDT_UINT32D, OI(COFF(uid)), C1, 0, TYP_NONE },
102
101
        { "gid", FLDT_UINT32D, OI(COFF(gid)), C1, 0, TYP_NONE },
 
102
        { "flushiter", FLDT_UINT16D, OI(COFF(flushiter)), C1, 0, TYP_NONE },
103
103
        { "atime", FLDT_TIMESTAMP, OI(COFF(atime)), C1, 0, TYP_NONE },
104
104
        { "mtime", FLDT_TIMESTAMP, OI(COFF(mtime)), C1, 0, TYP_NONE },
105
105
        { "ctime", FLDT_TIMESTAMP, OI(COFF(ctime)), C1, 0, TYP_NONE },
122
122
        { "realtime", FLDT_UINT1,
123
123
          OI(COFF(flags) + bitsz(__uint16_t) - XFS_DIFLAG_REALTIME_BIT - 1), C1,
124
124
          0, TYP_NONE },
 
125
        { "immutable", FLDT_UINT1,
 
126
          OI(COFF(flags) + bitsz(__uint16_t) - XFS_DIFLAG_IMMUTABLE_BIT-1), C1,
 
127
          0, TYP_NONE },
 
128
        { "append", FLDT_UINT1,
 
129
          OI(COFF(flags) + bitsz(__uint16_t) - XFS_DIFLAG_APPEND_BIT - 1), C1,
 
130
          0, TYP_NONE },
 
131
        { "sync", FLDT_UINT1,
 
132
          OI(COFF(flags) + bitsz(__uint16_t) - XFS_DIFLAG_SYNC_BIT - 1), C1,
 
133
          0, TYP_NONE },
 
134
        { "noatime", FLDT_UINT1,
 
135
          OI(COFF(flags) + bitsz(__uint16_t) - XFS_DIFLAG_NOATIME_BIT - 1), C1,
 
136
          0, TYP_NONE },
 
137
        { "nodump", FLDT_UINT1,
 
138
          OI(COFF(flags) + bitsz(__uint16_t) - XFS_DIFLAG_NODUMP_BIT - 1), C1,
 
139
          0, TYP_NONE },
125
140
        { "gen", FLDT_UINT32D, OI(COFF(gen)), C1, 0, TYP_NONE },
126
141
        { NULL }
127
142
};
375
390
typnm_t
376
391
inode_next_type(void)
377
392
{
378
 
        switch (iocur_top->mode & IFMT) {
379
 
        case IFDIR:
 
393
        switch (iocur_top->mode & S_IFMT) {
 
394
        case S_IFDIR:
380
395
                return XFS_DIR_IS_V2(mp) ? TYP_DIR2 : TYP_DIR;
381
 
        case IFLNK:
 
396
        case S_IFLNK:
382
397
                return TYP_SYMLINK;
383
 
        case IFREG:
 
398
        case S_IFREG:
384
399
                if (iocur_top->ino == mp->m_sb.sb_rbmino)
385
400
                        return TYP_RTBITMAP;
386
401
                else if (iocur_top->ino == mp->m_sb.sb_rsumino)
445
460
        dip = obj;
446
461
        ASSERT((char *)&dip->di_u - (char *)dip == byteize(startoff));
447
462
        return INT_GET(dip->di_core.di_format, ARCH_CONVERT) == XFS_DINODE_FMT_LOCAL &&
448
 
               (INT_GET(dip->di_core.di_mode, ARCH_CONVERT) & IFMT) == IFREG ?
 
463
               (INT_GET(dip->di_core.di_mode, ARCH_CONVERT) & S_IFMT) == S_IFREG ?
449
464
                (int)INT_GET(dip->di_core.di_size, ARCH_CONVERT) : 0;
450
465
}
451
466
 
489
504
        dip = obj;
490
505
        ASSERT((char *)&dip->di_u - (char *)dip == byteize(startoff));
491
506
        return INT_GET(dip->di_core.di_format, ARCH_CONVERT) == XFS_DINODE_FMT_LOCAL &&
492
 
               (INT_GET(dip->di_core.di_mode, ARCH_CONVERT) & IFMT) == IFDIR
 
507
               (INT_GET(dip->di_core.di_mode, ARCH_CONVERT) & S_IFMT) == S_IFDIR
493
508
               && XFS_DIR_IS_V1(mp);
494
509
}
495
510
 
505
520
        dip = obj;
506
521
        ASSERT((char *)&dip->di_u - (char *)dip == byteize(startoff));
507
522
        return INT_GET(dip->di_core.di_format, ARCH_CONVERT) == XFS_DINODE_FMT_LOCAL &&
508
 
               (INT_GET(dip->di_core.di_mode, ARCH_CONVERT) & IFMT) == IFDIR &&
 
523
               (INT_GET(dip->di_core.di_mode, ARCH_CONVERT) & S_IFMT) == S_IFDIR &&
509
524
               XFS_DIR_IS_V2(mp);
510
525
}
511
526
 
548
563
        dip = obj;
549
564
        ASSERT((char *)&dip->di_u - (char *)dip == byteize(startoff));
550
565
        return INT_GET(dip->di_core.di_format, ARCH_CONVERT) == XFS_DINODE_FMT_LOCAL &&
551
 
               (INT_GET(dip->di_core.di_mode, ARCH_CONVERT) & IFMT) == IFLNK ?
 
566
               (INT_GET(dip->di_core.di_mode, ARCH_CONVERT) & S_IFMT) == S_IFLNK ?
552
567
                (int)INT_GET(dip->di_core.di_size, ARCH_CONVERT) : 0;
553
568
}
554
569
 
586
601
        dip = iocur_top->data;
587
602
        iocur_top->ino = ino;
588
603
        iocur_top->mode = INT_GET(dip->di_core.di_mode, ARCH_CONVERT);
589
 
        if ((iocur_top->mode & IFMT) == IFDIR)
 
604
        if ((iocur_top->mode & S_IFMT) == S_IFDIR)
590
605
                iocur_top->dirino = ino;
591
606
 
592
607
        /* track updated info in ring */