Warning: Attempt to read property "date" on null in /usr/local/www/websvn.planix.org/blame.php on line 247

Warning: Attempt to read property "msg" on null in /usr/local/www/websvn.planix.org/blame.php on line 247
WebSVN – planix.SVN – Blame – /os/branches/feature_fixcpp/sys/include/ndb.h – Rev 2

Subversion Repositories planix.SVN

Rev

Go to most recent revision | Details | Last modification | View Log | RSS feed

Rev Author Line No. Line
2 - 1
#pragma	src	"/sys/src/libndb"
2
#pragma	lib	"libndb.a"
3
 
4
/*
5
 *  this include file requires includes of <u.h> and <bio.h>
6
 */
7
typedef struct Ndb	Ndb;
8
typedef struct Ndbtuple	Ndbtuple;
9
typedef struct Ndbhf	Ndbhf;
10
typedef struct Ndbs	Ndbs;
11
typedef struct Ndbcache	Ndbcache;
12
 
13
#pragma incomplete Ndbhf
14
#pragma incomplete Ndbcache
15
 
16
enum
17
{
18
	Ndbalen=	32,	/* max attribute length */
19
	Ndbvlen=	64,	/* max value length */
20
};
21
 
22
/*
23
 *  the database
24
 */
25
struct Ndb
26
{
27
	Ndb		*next;
28
 
29
	Biobufhdr	b;		/* buffered input file */
30
	uchar		buf[256];	/* and its buffer */
31
 
32
	ulong		mtime;		/* mtime of db file */
33
	Qid		qid;		/* qid of db file */
34
	char		file[128];/* path name of db file */
35
	ulong		length;		/* length of db file */
36
 
37
	int		nohash;		/* don't look for hash files */
38
	Ndbhf		*hf;		/* open hash files */
39
 
40
	int		ncache;		/* size of tuple cache */
41
	Ndbcache	*cache;		/* cached entries */
42
};
43
 
44
/*
45
 *  a parsed entry, doubly linked
46
 */
47
struct Ndbtuple
48
{
49
	char		attr[Ndbalen];		/* attribute name */
50
	char		*val;			/* value(s) */
51
	Ndbtuple	*entry;			/* next tuple in this entry */
52
	Ndbtuple	*line;			/* next tuple on this line */
53
	ulong		ptr;			/* (for the application - starts 0) */
54
	char		valbuf[Ndbvlen];	/* initial allocation for value */
55
};
56
 
57
/*
58
 *  each hash file is of the form
59
 *
60
 *		+---------------------------------------+
61
 *		|	mtime of db file (4 bytes)	|
62
 *		+---------------------------------------+
63
 *		|  size of table (in entries - 4 bytes)	|
64
 *		+---------------------------------------+
65
 *		|		hash table		|
66
 *		+---------------------------------------+
67
 *		|		hash chains		|
68
 *		+---------------------------------------+
69
 *
70
 *  hash collisions are resolved using chained entries added to the
71
 *  the end of the hash table.
72
 *
73
 *  Hash entries are of the form
74
 *
75
 *		+-------------------------------+
76
 *		|	offset	(3 bytes) 	|
77
 *		+-------------------------------+
78
 *
79
 *  Chain entries are of the form
80
 *
81
 *		+-------------------------------+
82
 *		|	offset1	(3 bytes) 	|
83
 *		+-------------------------------+
84
 *		|	offset2	(3 bytes) 	|
85
 *		+-------------------------------+
86
 *
87
 *  The top bit of an offset set to 1 indicates a pointer to a hash chain entry.
88
 */
89
#define NDBULLEN	4		/* unsigned long length in bytes */
90
#define NDBPLEN		3		/* pointer length in bytes */
91
#define NDBHLEN		(2*NDBULLEN)	/* hash file header length in bytes */
92
 
93
/*
94
 *  finger pointing to current point in a search
95
 */
96
struct Ndbs
97
{
98
	Ndb	*db;	/* data base file being searched */
99
	Ndbhf	*hf;	/* hash file being searched */
100
	int	type;
101
	ulong	ptr;	/* current pointer */
102
	ulong	ptr1;	/* next pointer */
103
	Ndbtuple *t;	/* last attribute value pair found */
104
};
105
 
106
/*
107
 *  bit defs for pointers in hash files
108
 */
109
#define NDBSPEC 	(1<<23)
110
#define NDBCHAIN	NDBSPEC		/* points to a collision chain */
111
#define NDBNAP		(NDBSPEC|1)	/* not a pointer */
112
 
113
/*
114
 *  macros for packing and unpacking pointers
115
 */
116
#define NDBPUTP(v,a) { (a)[0] = v; (a)[1] = (v)>>8; (a)[2] = (v)>>16; }
117
#define NDBGETP(a) ((a)[0] | ((a)[1]<<8) | ((a)[2]<<16))
118
 
119
/*
120
 *  macros for packing and unpacking unsigned longs
121
 */
122
#define NDBPUTUL(v,a) { (a)[0] = v; (a)[1] = (v)>>8; (a)[2] = (v)>>16; (a)[3] = (v)>>24; }
123
#define NDBGETUL(a) ((a)[0] | ((a)[1]<<8) | ((a)[2]<<16) | ((a)[3]<<24))
124
 
125
#define NDB_IPlen 16
126
 
127
Ndbtuple*	csgetval(char*, char*, char*, char*, char*);
128
char*		csgetvalue(char*, char*, char*, char*, Ndbtuple**);
129
Ndbtuple*	csipinfo(char*, char*, char*, char**, int);
130
Ndbtuple*	dnsquery(char*, char*, char*);
131
char*		ipattr(char*);
132
Ndb*		ndbcat(Ndb*, Ndb*);
133
int		ndbchanged(Ndb*);
134
void		ndbclose(Ndb*);
135
Ndbtuple*	ndbconcatenate(Ndbtuple*, Ndbtuple*);
136
Ndbtuple*	ndbdiscard(Ndbtuple*, Ndbtuple*);
137
void		ndbfree(Ndbtuple*);
138
Ndbtuple*	ndbgetipaddr(Ndb*, char*);
139
Ndbtuple*	ndbgetval(Ndb*, Ndbs*, char*, char*, char*, char*);
140
char*		ndbgetvalue(Ndb*, Ndbs*, char*, char*, char*, Ndbtuple**);
141
Ndbtuple*	ndbfindattr(Ndbtuple*, Ndbtuple*, char*);
142
ulong		ndbhash(char*, int);
143
Ndbtuple*	ndbipinfo(Ndb*, char*, char*, char**, int);
144
Ndbtuple*	ndblookval(Ndbtuple*, Ndbtuple*, char*, char*);
145
Ndbtuple*	ndbnew(char*, char*);
146
Ndb*		ndbopen(char*);
147
Ndbtuple*	ndbparse(Ndb*);
148
int		ndbreopen(Ndb*);
149
Ndbtuple*	ndbreorder(Ndbtuple*, Ndbtuple*);
150
Ndbtuple*	ndbsearch(Ndb*, Ndbs*, char*, char*);
151
void		ndbsetval(Ndbtuple*, char*, int);
152
Ndbtuple*	ndbsnext(Ndbs*, char*, char*);
153
Ndbtuple*	ndbsubstitute(Ndbtuple*, Ndbtuple*, Ndbtuple*);
154
void		ndbsetmalloctag(Ndbtuple*, uintptr);