Subversion Repositories planix.SVN

Rev

Rev 2 | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
2 - 1
/*
2
 *	Journal Based Flash Entrysystem.
3
 */
4
 
5
enum
6
{
7
// sector header
8
	MAGSIZE		= 4,
9
	MAXHDR		= MAGSIZE+3+3,
10
 
11
	MAGIC0		= 'R',
12
	MAGIC1		= 'O',
13
	MAGIC2		= 'O',
14
	FFSVERS		= '0',
15
 
16
// transactions
17
	FT_create	= 'G',
18
	FT_FCREATE0	= 'C',
19
	FT_FCREATE1	= 'E',
20
	FT_DCREATE0	= 'D',
21
	FT_DCREATE1	= 'F',
22
	FT_chmod	= 'H',
23
	FT_CHMOD0	= 'M',
24
	FT_CHMOD1	= 'O',
25
	FT_REMOVE	= 'R',
26
	FT_WRITE	= 'W',
27
	FT_AWRITE	= 'A',
28
	FT_trunc	= 'I',
29
	FT_TRUNC0	= 'T',
30
	FT_TRUNC1	= 'V',
31
	FT_SUMMARY	= 'S',
32
	FT_SUMBEG	= 'B',
33
	FT_SUMEND	= 'Z',
34
 
35
	MAXFSIZE	= 1 << 21,
36
	MAXNSIZE	= 28,
37
 
38
	Ncreate		= 1+1+3*3+MAXNSIZE+1,
39
	Nchmod		= 1+1+2*3,
40
	Nremove		= 1+3,
41
	Nwrite		= 1+4*3,
42
	Ntrunc		= 1+1+4*3+MAXNSIZE+1,
43
	Nsumbeg		= 1+3,
44
	Nmax		= Ncreate,
45
 
46
	Nsum		= 2*(1+3),
47
	Nfree		= 3,
48
 
49
	HBITS		= 5,
50
	HSIZE		= 1 << HBITS,
51
	HMASK		= HSIZE - 1,
52
	NOTIME		= 0xFFFFFFFF,
53
 
54
	WRSIZE		= 4*1024,
55
};
56
 
57
typedef	struct	Extent	Extent;
58
typedef	struct	Exts	Exts;
59
typedef	struct	Entry	Entry;
60
typedef	struct	Dirr	Dirr;
61
typedef struct	Jrec	Jrec;
62
typedef struct	Renum	Renum;
63
 
64
struct Extent
65
{
66
	int	sect;
67
	ulong	addr;
68
	ulong	off;
69
	ulong	size;
70
	Extent*	next;
71
	Extent*	prev;
72
};
73
 
74
struct Exts
75
{
76
	Extent*	head;
77
	Extent*	tail;
78
};
79
 
80
struct Entry
81
{
82
	int	ref;
83
	char*	name;
84
	ulong	fnum;
85
	ulong	mode;
86
	ulong	mnum;
87
	ulong	mtime;
88
	ulong	size;
89
 
90
	union
91
	{
92
		struct
93
		{
94
			Entry**	htab;
95
			Entry*	files;
96
			Dirr*	readers;
97
		};
98
		struct
99
		{
100
			Exts	gen[2];
101
		};
102
	};
103
 
104
	Entry*	parent;
105
	Entry*	hnext;
106
	Entry*	hprev;
107
	Entry*	fnext;
108
	Entry*	fprev;
109
};
110
 
111
struct Dirr
112
{
113
	Entry*	dir;
114
	Entry*	cur;
115
	Dirr*	next;
116
	Dirr*	prev;
117
	ulong	offset;
118
};
119
 
120
struct Jrec
121
{
122
	int	type;
123
	ulong	mode;
124
	ulong	fnum;
125
	ulong	mnum;
126
	ulong	tnum;
127
	ulong	mtime;
128
	ulong	parent;
129
	ulong	size;
130
	ulong	offset;
131
	ulong	seq;
132
	char	name[MAXNSIZE+2];
133
};
134
 
135
struct Renum
136
{
137
	int	old;
138
	int	new;
139
};
140
 
141
extern	void	initdata(char*, int);
142
extern	void	clearsect(int);
143
extern	void	readdata(int, void*, ulong, ulong);
144
extern	int	writedata(int, int, void*, ulong, ulong);
145
extern	int	getc3(uchar*, ulong*);
146
extern	int	putc3(uchar*, ulong);
147
extern	ulong	get4(uchar*);
148
extern	void	put4(uchar*, ulong);
149
extern	int	convM2J(Jrec*, uchar*);
150
extern	int	convJ2M(Jrec*, uchar*);
151
extern	void	loadfs(int);
152
extern	char*	need(int bytes);
153
extern	void	put(Jrec*, int);
154
extern	void	putw(Jrec*, int, Extent *x, void*);
155
extern	int	Jconv(Fmt*);
156
extern	ulong	now(void);
157
extern	void	serve(char*);
158
 
159
#pragma	varargck	type	"J"	Jrec*
160
 
161
extern	void	einit(void);
162
extern	void	edump(void);
163
extern	Entry*	elookup(ulong);
164
extern	Extent*	esum(Entry*, int, ulong, int*);
165
extern	void	edestroy(Entry*);
166
extern	Entry*	ecreate(Entry*, char*, ulong, ulong, ulong, char**);
167
extern	char*	eremove(Entry*);
168
extern	Entry*	ewalk(Entry*, char*, char**);
169
extern	void	etrunc(Entry*, ulong, ulong);
170
extern	ulong	echmod(Entry*, ulong, ulong);
171
extern	ulong	eread(Entry*, int, void*, ulong, ulong);
172
extern	void	ewrite(Entry*, Extent *, int, ulong);
173
extern	Qid	eqid(Entry*);
174
extern	void	estat(Entry*, Dir*, int);
175
extern	Dirr*	ediropen(Entry*);
176
extern	int	edirread(Dirr*, char*, long);
177
extern	void	edirclose(Dirr*);
178
extern	void	erenum(Renum*);
179
 
180
extern	char	Edirnotempty[];
181
extern	char	Eexists[];
182
extern	char	Eisdir[];
183
extern	char	Enonexist[];
184
extern	char	Enotdir[];
185
extern	char	Eperm[];
186
extern	char	Erofs[];
187
 
188
extern	ulong	sectsize;
189
extern	ulong	nsects;
190
extern	uchar*	sectbuff;
191
extern	Entry	*root;
192
extern	int	readonly;
193
extern	ulong	delta;
194
extern	int	eparity;
195
extern	uchar	magic[];
196
extern	ulong	used;
197
extern	ulong	limit;
198
extern	ulong	maxwrite;