This source file includes following definitions.
- DBA_OPEN_FUNC
- DBA_CLOSE_FUNC
- DBA_FETCH_FUNC
- DBA_UPDATE_FUNC
- DBA_EXISTS_FUNC
- DBA_DELETE_FUNC
- DBA_FIRSTKEY_FUNC
- DBA_NEXTKEY_FUNC
- DBA_OPTIMIZE_FUNC
- DBA_SYNC_FUNC
- DBA_INFO_FUNC
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21 #ifdef HAVE_CONFIG_H
22 #include "config.h"
23 #endif
24
25 #include "php.h"
26
27 #if DBA_DB1
28 #include "php_db1.h"
29
30 #ifdef DB1_INCLUDE_FILE
31 #include DB1_INCLUDE_FILE
32 #endif
33
34 #include <sys/types.h>
35 #include <sys/stat.h>
36 #include <fcntl.h>
37
38 #define DB1_DATA dba_db1_data *dba = info->dbf
39 #define DB1_GKEY DBT gkey; gkey.data = (char *) key; gkey.size = keylen
40
41 typedef struct {
42 DB *dbp;
43 } dba_db1_data;
44
45 DBA_OPEN_FUNC(db1)
46 {
47 dba_db1_data *dba;
48 DB *db;
49
50 int gmode;
51 int filemode = 0644;
52
53 if (info->argc > 0) {
54 convert_to_long_ex(&info->argv[0]);
55 filemode = Z_LVAL(info->argv[0]);
56 }
57
58 gmode = 0;
59 switch (info->mode) {
60 case DBA_READER:
61 gmode = O_RDONLY;
62 break;
63 case DBA_WRITER:
64 gmode = O_RDWR;
65 break;
66 case DBA_CREAT:
67 gmode = O_RDWR | O_CREAT;
68 break;
69 case DBA_TRUNC:
70 gmode = O_RDWR | O_CREAT | O_TRUNC;
71 break;
72 default:
73 return FAILURE;
74 }
75
76 db = dbopen((char *)info->path, gmode, filemode, DB_HASH, NULL);
77
78 if (db == NULL) {
79 return FAILURE;
80 }
81
82 dba = pemalloc(sizeof(*dba), info->flags&DBA_PERSISTENT);
83 dba->dbp = db;
84
85 info->dbf = dba;
86
87 return SUCCESS;
88 }
89
90 DBA_CLOSE_FUNC(db1)
91 {
92 DB1_DATA;
93 dba->dbp->close(dba->dbp);
94 pefree(info->dbf, info->flags&DBA_PERSISTENT);
95 }
96
97 DBA_FETCH_FUNC(db1)
98 {
99 DBT gval;
100 DB1_DATA;
101 DB1_GKEY;
102
103 memset(&gval, 0, sizeof(gval));
104 if (dba->dbp->get(dba->dbp, &gkey, &gval, 0) == RET_SUCCESS) {
105 if (newlen) *newlen = gval.size;
106 return estrndup(gval.data, gval.size);
107 }
108 return NULL;
109 }
110
111 DBA_UPDATE_FUNC(db1)
112 {
113 DBT gval;
114 DB1_DATA;
115 DB1_GKEY;
116
117 gval.data = (char *) val;
118 gval.size = vallen;
119
120 return dba->dbp->put(dba->dbp, &gkey, &gval, mode == 1 ? R_NOOVERWRITE : 0) != RET_SUCCESS ? FAILURE : SUCCESS;
121 }
122
123 DBA_EXISTS_FUNC(db1)
124 {
125 DBT gval;
126 DB1_DATA;
127 DB1_GKEY;
128
129 return dba->dbp->get(dba->dbp, &gkey, &gval, 0) != RET_SUCCESS ? FAILURE : SUCCESS;
130 }
131
132 DBA_DELETE_FUNC(db1)
133 {
134 DB1_DATA;
135 DB1_GKEY;
136
137 return dba->dbp->del(dba->dbp, &gkey, 0) != RET_SUCCESS ? FAILURE : SUCCESS;
138 }
139
140 DBA_FIRSTKEY_FUNC(db1)
141 {
142 DBT gkey;
143 DBT gval;
144 DB1_DATA;
145
146 memset(&gkey, 0, sizeof(gkey));
147 memset(&gval, 0, sizeof(gval));
148
149 if (dba->dbp->seq(dba->dbp, &gkey, &gval, R_FIRST) == RET_SUCCESS) {
150 if (newlen) *newlen = gkey.size;
151 return estrndup(gkey.data, gkey.size);
152 }
153 return NULL;
154 }
155
156 DBA_NEXTKEY_FUNC(db1)
157 {
158 DBT gkey;
159 DBT gval;
160 DB1_DATA;
161
162 memset(&gkey, 0, sizeof(gkey));
163 memset(&gval, 0, sizeof(gval));
164
165 if (dba->dbp->seq(dba->dbp, &gkey, &gval, R_NEXT) == RET_SUCCESS) {
166 if (newlen) *newlen = gkey.size;
167 return estrndup(gkey.data, gkey.size);
168 }
169 return NULL;
170 }
171
172 DBA_OPTIMIZE_FUNC(db1)
173 {
174
175 return SUCCESS;
176 }
177
178 DBA_SYNC_FUNC(db1)
179 {
180 return SUCCESS;
181 }
182
183 DBA_INFO_FUNC(db1)
184 {
185 return estrdup(DB1_VERSION);
186 }
187
188 #endif
189
190
191
192
193
194
195
196
197