OpenCores
URL https://opencores.org/ocsvn/eco32/eco32/trunk

Subversion Repositories eco32

[/] [eco32/] [tags/] [eco32-0.24/] [disk/] [tools/] [fs-NetBSD/] [makefs/] [dir.h] - Blame information for rev 333

Go to most recent revision | Details | Compare with Previous | View Log

Line No. Rev Author Line
1 17 hellwig
/*      $NetBSD: dir.h,v 1.21 2009/07/22 04:49:19 dholland Exp $        */
2
 
3
/*
4
 * Copyright (c) 1982, 1986, 1989, 1993
5
 *      The Regents of the University of California.  All rights reserved.
6
 * (c) UNIX System Laboratories, Inc.
7
 * All or some portions of this file are derived from material licensed
8
 * to the University of California by American Telephone and Telegraph
9
 * Co. or Unix System Laboratories, Inc. and are reproduced herein with
10
 * the permission of UNIX System Laboratories, Inc.
11
 *
12
 * Redistribution and use in source and binary forms, with or without
13
 * modification, are permitted provided that the following conditions
14
 * are met:
15
 * 1. Redistributions of source code must retain the above copyright
16
 *    notice, this list of conditions and the following disclaimer.
17
 * 2. Redistributions in binary form must reproduce the above copyright
18
 *    notice, this list of conditions and the following disclaimer in the
19
 *    documentation and/or other materials provided with the distribution.
20
 * 3. Neither the name of the University nor the names of its contributors
21
 *    may be used to endorse or promote products derived from this software
22
 *    without specific prior written permission.
23
 *
24
 * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
25
 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
26
 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
27
 * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
28
 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
29
 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
30
 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
31
 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
32
 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
33
 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
34
 * SUCH DAMAGE.
35
 *
36
 *      @(#)dir.h       8.5 (Berkeley) 4/27/95
37
 */
38
 
39
#ifndef _UFS_UFS_DIR_H_
40
#define _UFS_UFS_DIR_H_
41
 
42
/*
43
 * Theoretically, directories can be more than 2Gb in length; however, in
44
 * practice this seems unlikely. So, we define the type doff_t as a 32-bit
45
 * quantity to keep down the cost of doing lookup on a 32-bit machine.
46
 */
47
#define doff_t          int32_t
48
#define MAXDIRSIZE      (0x7fffffff)
49
 
50
/*
51
 * A directory consists of some number of blocks of DIRBLKSIZ
52
 * bytes, where DIRBLKSIZ is chosen such that it can be transferred
53
 * to disk in a single atomic operation (e.g. 512 bytes on most machines).
54
 *
55
 * Each DIRBLKSIZ byte block contains some number of directory entry
56
 * structures, which are of variable length.  Each directory entry has
57
 * a struct direct at the front of it, containing its inode number,
58
 * the length of the entry, and the length of the name contained in
59
 * the entry.  These are followed by the name padded to a 4 byte boundary.
60
 * All names are guaranteed null terminated.
61
 * The maximum length of a name in a directory is FFS_MAXNAMLEN.
62
 *
63
 * The macro DIRSIZ(fmt, dp) gives the amount of space required to represent
64
 * a directory entry.  Free space in a directory is represented by
65
 * entries which have dp->d_reclen > DIRSIZ(fmt, dp).  All DIRBLKSIZ bytes
66
 * in a directory block are claimed by the directory entries.  This
67
 * usually results in the last entry in a directory having a large
68
 * dp->d_reclen.  When entries are deleted from a directory, the
69
 * space is returned to the previous entry in the same directory
70
 * block by increasing its dp->d_reclen.  If the first entry of
71
 * a directory block is free, then its dp->d_ino is set to 0.
72
 * Entries other than the first in a directory do not normally have
73
 * dp->d_ino set to 0.
74
 */
75
#undef  DIRBLKSIZ
76
#define DIRBLKSIZ       DEV_BSIZE
77
#define FFS_MAXNAMLEN   255
78
#define APPLEUFS_DIRBLKSIZ 1024
79
 
80
#define d_ino d_fileno
81
struct  direct {
82
        u_int32_t d_fileno;             /* inode number of entry */
83
        u_int16_t d_reclen;             /* length of this record */
84
        u_int8_t  d_type;               /* file type, see below */
85
        u_int8_t  d_namlen;             /* length of string in d_name */
86
        char      d_name[FFS_MAXNAMLEN + 1];/* name with length <= FFS_MAXNAMLEN */
87
};
88
 
89
/*
90
 * File types
91
 */
92
#define DT_UNKNOWN       0
93
#define DT_FIFO          1
94
#define DT_CHR           2
95
#define DT_DIR           4
96
#define DT_BLK           6
97
#define DT_REG           8
98
#define DT_LNK          10
99
#define DT_SOCK         12
100
#define DT_WHT          14
101
 
102
/*
103
 * Convert between stat structure types and directory types.
104
 */
105
#define IFTODT(mode)    (((mode) & 0170000) >> 12)
106
#define DTTOIF(dirtype) ((dirtype) << 12)
107
 
108
/*
109
 * The DIRSIZ macro gives the minimum record length which will hold
110
 * the directory entry.  This requires the amount of space in struct direct
111
 * without the d_name field, plus enough space for the name with a terminating
112
 * null byte (dp->d_namlen+1), rounded up to a 4 byte boundary.
113
 */
114
#define DIRECTSIZ(namlen) \
115
        ((sizeof(struct direct) - (FFS_MAXNAMLEN+1)) + (((namlen)+1 + 3) &~ 3))
116
 
117
#if (BYTE_ORDER == LITTLE_ENDIAN)
118
#define DIRSIZ(oldfmt, dp, needswap)    \
119
    (((oldfmt) && !(needswap)) ?        \
120
    DIRECTSIZ((dp)->d_type) : DIRECTSIZ((dp)->d_namlen))
121
#else
122
#define DIRSIZ(oldfmt, dp, needswap)    \
123
    (((oldfmt) && (needswap)) ?         \
124
    DIRECTSIZ((dp)->d_type) : DIRECTSIZ((dp)->d_namlen))
125
#endif
126
 
127
#define OLDDIRFMT       1
128
#define NEWDIRFMT       0
129
 
130
/*
131
 * Template for manipulating directories.  Should use struct direct's,
132
 * but the name field is FFS_MAXNAMLEN - 1, and this just won't do.
133
 */
134
struct dirtemplate {
135
        u_int32_t       dot_ino;
136
        int16_t         dot_reclen;
137
        u_int8_t        dot_type;
138
        u_int8_t        dot_namlen;
139
        char            dot_name[4];    /* must be multiple of 4 */
140
        u_int32_t       dotdot_ino;
141
        int16_t         dotdot_reclen;
142
        u_int8_t        dotdot_type;
143
        u_int8_t        dotdot_namlen;
144
        char            dotdot_name[4]; /* ditto */
145
};
146
 
147
/*
148
 * This is the old format of directories, sanz type element.
149
 */
150
struct odirtemplate {
151
        u_int32_t       dot_ino;
152
        int16_t         dot_reclen;
153
        u_int16_t       dot_namlen;
154
        char            dot_name[4];    /* must be multiple of 4 */
155
        u_int32_t       dotdot_ino;
156
        int16_t         dotdot_reclen;
157
        u_int16_t       dotdot_namlen;
158
        char            dotdot_name[4]; /* ditto */
159
};
160
#endif /* !_UFS_UFS_DIR_H_ */

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.