/* [<][>][^][v][top][bottom][index][help] */
DEFINITIONS
This source file includes following definitions.
- ScmNdbm
- ndbm_print
- Scm_Init_ndbm
- ndbm_finalize
- ndbm_ndbm_open
- ndbm_ndbm_close
- ndbm_ndbm_closedP
- ndbm_ndbm_store
- ndbm_ndbm_fetch
- ndbm_ndbm_existsP
- ndbm_ndbm_delete
- ndbm_ndbm_firstkey
- ndbm_ndbm_nextkey
- ndbm_ndbm_error
- ndbm_ndbm_clearerror
- Scm_Init_ndbm
1 /* Generated by genstub. Do not edit. */
2 #include <gauche.h>
3 #if defined(__CYGWIN__) || defined(__MINGW32__)
4 #define SCM_CGEN_CONST /*empty*/
5 #else
6 #define SCM_CGEN_CONST const
7 #endif
8
9 #include <fcntl.h>
10 #include <gauche/extend.h>
11 #include "dbmconf.h"
12
13 #if HAVE_NDBM_H
14 #include <ndbm.h>
15 #elif HAVE_GDBM_NDBM_H
16 #include <gdbm/ndbm.h>
17 #endif
18
19 SCM_CLASS_DECL(Scm_NdbmClass);
20 static void ndbm_print(ScmObj, ScmPort *, ScmWriteContext*);
21 SCM_DEFINE_BUILTIN_CLASS_SIMPLE(Scm_NdbmClass, ndbm_print);
22
23 #define SCM_CLASS_NDBM (&Scm_NdbmClass)
24 #define SCM_NDBM(obj) ((ScmNdbm*)obj)
25 #define SCM_NDBMP(obj) SCM_XTYPEP(obj, SCM_CLASS_NDBM)
26
27 typedef struct ScmNdbmRec {
28 SCM_HEADER;
29 ScmObj name;
30 DBM *dbf; /* NULL if closed */
31 } ScmNdbm;
32
33 static void ndbm_print(ScmObj obj, ScmPort *out, ScmWriteContext *ctx)
34 {
35 Scm_Printf(out, "#<ndbm-file %S>", SCM_NDBM(obj)->name);
36 }
37
38 #define TO_DATUM(datum_, scm_) \
39 do { \
40 const ScmStringBody *b = SCM_STRING_BODY(scm_);\
41 datum_.dptr = (char*)SCM_STRING_BODY_START(b); \
42 datum_.dsize = SCM_STRING_BODY_SIZE(b); \
43 } while (0)
44 #define FROM_DATUM(scm_, datum_) \
45 do { \
46 if (datum_.dptr) { \
47 scm_ = Scm_MakeString(datum_.dptr, datum_.dsize, -1, SCM_MAKSTR_COPYING); \
48 } else { \
49 scm_ = SCM_FALSE; \
50 } \
51 } while (0)
52
53 #define CHECK_NDBM(g) if (!g->dbf) Scm_Error("ndbm file already closed: %S", g)
54
55 /* Hack for initialization stub */
56 static void Scm_ndbm_internal_init(ScmModule*);
57 void Scm_Init_ndbm(void)
58 {
59 ScmModule *mod;
60 SCM_INIT_EXTENSION(ndbm);
61 mod = SCM_FIND_MODULE("dbm.ndbm", SCM_FIND_MODULE_CREATE);
62 Scm_InitStaticClass(&Scm_NdbmClass, "<ndbm-file>", mod, NULL, 0);
63 Scm_ndbm_internal_init(mod);
64 }
65 #define Scm_Init_ndbm Scm_ndbm_internal_init
66
67 static void ndbm_finalize(ScmObj obj, void *data)
68 {
69 ScmNdbm *n = SCM_NDBM(obj);
70 if (n->dbf) { dbm_close(n->dbf); n->dbf = NULL; }
71 }
72
73 static ScmObj ndbm_ndbm_open(ScmObj *SCM_FP, int SCM_ARGCNT, void *data_)
74 {
75 ScmObj name_scm;
76 ScmString* name;
77 ScmObj flags_scm;
78 int flags;
79 ScmObj mode_scm;
80 int mode;
81 SCM_ENTER_SUBR("ndbm-open");
82 name_scm = SCM_ARGREF(0);
83 if (!SCM_STRINGP(name_scm)) Scm_Error("string required, but got %S", name_scm);
84 name = SCM_STRING(name_scm);
85 flags_scm = SCM_ARGREF(1);
86 if (!SCM_INTP(flags_scm)) Scm_Error("small integer required, but got %S", flags_scm);
87 flags = SCM_INT_VALUE(flags_scm);
88 mode_scm = SCM_ARGREF(2);
89 if (!SCM_INTP(mode_scm)) Scm_Error("small integer required, but got %S", mode_scm);
90 mode = SCM_INT_VALUE(mode_scm);
91 {
92 ScmNdbm *z = SCM_NEW(ScmNdbm);
93 SCM_SET_CLASS(z, SCM_CLASS_NDBM);
94 Scm_RegisterFinalizer(SCM_OBJ(z), ndbm_finalize, NULL);
95 z->name = SCM_OBJ(name);
96 z->dbf = dbm_open(Scm_GetString(name), flags, mode);
97 if (z->dbf == NULL) Scm_SysError("couldn't open ndbm file %S", name);
98 SCM_RETURN(SCM_OBJ(z));
99 }
100 }
101
102 static SCM_DEFINE_STRING_CONST(ndbm_ndbm_open__NAME, "ndbm-open", 9, 9);
103 static SCM_DEFINE_SUBR(ndbm_ndbm_open__STUB, 3, 0, SCM_OBJ(&ndbm_ndbm_open__NAME), ndbm_ndbm_open, NULL, NULL);
104
105 static ScmObj ndbm_ndbm_close(ScmObj *SCM_FP, int SCM_ARGCNT, void *data_)
106 {
107 ScmObj ndbm_scm;
108 ScmNdbm* ndbm;
109 SCM_ENTER_SUBR("ndbm-close");
110 ndbm_scm = SCM_ARGREF(0);
111 if (!SCM_NDBMP(ndbm_scm)) Scm_Error("<ndbm> required, but got %S", ndbm_scm);
112 ndbm = SCM_NDBM(ndbm_scm);
113 {
114 if (ndbm->dbf) {
115 dbm_close(ndbm->dbf);
116 ndbm->dbf = NULL;
117 }
118 SCM_RETURN(SCM_UNDEFINED);
119 }
120 }
121
122 static SCM_DEFINE_STRING_CONST(ndbm_ndbm_close__NAME, "ndbm-close", 10, 10);
123 static SCM_DEFINE_SUBR(ndbm_ndbm_close__STUB, 1, 0, SCM_OBJ(&ndbm_ndbm_close__NAME), ndbm_ndbm_close, NULL, NULL);
124
125 static ScmObj ndbm_ndbm_closedP(ScmObj *SCM_FP, int SCM_ARGCNT, void *data_)
126 {
127 ScmObj ndbm_scm;
128 ScmNdbm* ndbm;
129 SCM_ENTER_SUBR("ndbm-closed?");
130 ndbm_scm = SCM_ARGREF(0);
131 if (!SCM_NDBMP(ndbm_scm)) Scm_Error("<ndbm> required, but got %S", ndbm_scm);
132 ndbm = SCM_NDBM(ndbm_scm);
133 {
134 {
135 int SCM_RESULT;
136 SCM_RESULT = (ndbm->dbf == NULL);
137 SCM_RETURN(SCM_MAKE_BOOL(SCM_RESULT));
138 }
139 }
140 }
141
142 static SCM_DEFINE_STRING_CONST(ndbm_ndbm_closedP__NAME, "ndbm-closed?", 12, 12);
143 static SCM_DEFINE_SUBR(ndbm_ndbm_closedP__STUB, 1, 0, SCM_OBJ(&ndbm_ndbm_closedP__NAME), ndbm_ndbm_closedP, NULL, NULL);
144
145 static ScmObj ndbm_ndbm_store(ScmObj *SCM_FP, int SCM_ARGCNT, void *data_)
146 {
147 ScmObj ndbm_scm;
148 ScmNdbm* ndbm;
149 ScmObj key_scm;
150 ScmString* key;
151 ScmObj val_scm;
152 ScmString* val;
153 ScmObj flags_scm;
154 int flags;
155 ScmObj SCM_OPTARGS = SCM_ARGREF(SCM_ARGCNT-1);
156 SCM_ENTER_SUBR("ndbm-store");
157 if (Scm_Length(SCM_OPTARGS) > 1)
158 Scm_Error("too many arguments: up to 1 is expected, %d given.", Scm_Length(SCM_OPTARGS));
159 ndbm_scm = SCM_ARGREF(0);
160 if (!SCM_NDBMP(ndbm_scm)) Scm_Error("<ndbm> required, but got %S", ndbm_scm);
161 ndbm = SCM_NDBM(ndbm_scm);
162 key_scm = SCM_ARGREF(1);
163 if (!SCM_STRINGP(key_scm)) Scm_Error("string required, but got %S", key_scm);
164 key = SCM_STRING(key_scm);
165 val_scm = SCM_ARGREF(2);
166 if (!SCM_STRINGP(val_scm)) Scm_Error("string required, but got %S", val_scm);
167 val = SCM_STRING(val_scm);
168 if (SCM_NULLP(SCM_OPTARGS)) flags_scm = Scm_MakeInteger(0);
169 else {
170 flags_scm = SCM_CAR(SCM_OPTARGS);
171 SCM_OPTARGS = SCM_CDR(SCM_OPTARGS);
172 }
173 if (!SCM_INTP(flags_scm)) Scm_Error("small integer required, but got %S", flags_scm);
174 flags = SCM_INT_VALUE(flags_scm);
175 {
176 {
177 int SCM_RESULT;
178 datum dkey, dval;
179 CHECK_NDBM(ndbm);
180 TO_DATUM(dkey, key);
181 TO_DATUM(dval, val);
182 SCM_RESULT = dbm_store(ndbm->dbf, dkey, dval, flags);
183 SCM_RETURN(Scm_MakeInteger(SCM_RESULT));
184 }
185 }
186 }
187
188 static SCM_DEFINE_STRING_CONST(ndbm_ndbm_store__NAME, "ndbm-store", 10, 10);
189 static SCM_DEFINE_SUBR(ndbm_ndbm_store__STUB, 3, 1, SCM_OBJ(&ndbm_ndbm_store__NAME), ndbm_ndbm_store, NULL, NULL);
190
191 static ScmObj ndbm_ndbm_fetch(ScmObj *SCM_FP, int SCM_ARGCNT, void *data_)
192 {
193 ScmObj ndbm_scm;
194 ScmNdbm* ndbm;
195 ScmObj key_scm;
196 ScmString* key;
197 SCM_ENTER_SUBR("ndbm-fetch");
198 ndbm_scm = SCM_ARGREF(0);
199 if (!SCM_NDBMP(ndbm_scm)) Scm_Error("<ndbm> required, but got %S", ndbm_scm);
200 ndbm = SCM_NDBM(ndbm_scm);
201 key_scm = SCM_ARGREF(1);
202 if (!SCM_STRINGP(key_scm)) Scm_Error("string required, but got %S", key_scm);
203 key = SCM_STRING(key_scm);
204 {
205 {
206 ScmObj SCM_RESULT;
207 datum dkey, dval;
208 CHECK_NDBM(ndbm);
209 TO_DATUM(dkey, key);
210 dval = dbm_fetch(ndbm->dbf, dkey);
211 FROM_DATUM(SCM_RESULT, dval);
212 SCM_RETURN(SCM_OBJ_SAFE(SCM_RESULT));
213 }
214 }
215 }
216
217 static SCM_DEFINE_STRING_CONST(ndbm_ndbm_fetch__NAME, "ndbm-fetch", 10, 10);
218 static SCM_DEFINE_SUBR(ndbm_ndbm_fetch__STUB, 2, 0, SCM_OBJ(&ndbm_ndbm_fetch__NAME), ndbm_ndbm_fetch, NULL, NULL);
219
220 static ScmObj ndbm_ndbm_existsP(ScmObj *SCM_FP, int SCM_ARGCNT, void *data_)
221 {
222 ScmObj ndbm_scm;
223 ScmNdbm* ndbm;
224 ScmObj key_scm;
225 ScmString* key;
226 SCM_ENTER_SUBR("ndbm-exists?");
227 ndbm_scm = SCM_ARGREF(0);
228 if (!SCM_NDBMP(ndbm_scm)) Scm_Error("<ndbm> required, but got %S", ndbm_scm);
229 ndbm = SCM_NDBM(ndbm_scm);
230 key_scm = SCM_ARGREF(1);
231 if (!SCM_STRINGP(key_scm)) Scm_Error("string required, but got %S", key_scm);
232 key = SCM_STRING(key_scm);
233 {
234 {
235 int SCM_RESULT;
236 datum dkey, dval;
237 CHECK_NDBM(ndbm);
238 TO_DATUM(dkey, key);
239 dval = dbm_fetch(ndbm->dbf, dkey);
240 SCM_RESULT = (dval.dptr != NULL);
241 SCM_RETURN(SCM_MAKE_BOOL(SCM_RESULT));
242 }
243 }
244 }
245
246 static SCM_DEFINE_STRING_CONST(ndbm_ndbm_existsP__NAME, "ndbm-exists?", 12, 12);
247 static SCM_DEFINE_SUBR(ndbm_ndbm_existsP__STUB, 2, 0, SCM_OBJ(&ndbm_ndbm_existsP__NAME), ndbm_ndbm_existsP, NULL, NULL);
248
249 static ScmObj ndbm_ndbm_delete(ScmObj *SCM_FP, int SCM_ARGCNT, void *data_)
250 {
251 ScmObj ndbm_scm;
252 ScmNdbm* ndbm;
253 ScmObj key_scm;
254 ScmString* key;
255 SCM_ENTER_SUBR("ndbm-delete");
256 ndbm_scm = SCM_ARGREF(0);
257 if (!SCM_NDBMP(ndbm_scm)) Scm_Error("<ndbm> required, but got %S", ndbm_scm);
258 ndbm = SCM_NDBM(ndbm_scm);
259 key_scm = SCM_ARGREF(1);
260 if (!SCM_STRINGP(key_scm)) Scm_Error("string required, but got %S", key_scm);
261 key = SCM_STRING(key_scm);
262 {
263 {
264 int SCM_RESULT;
265 datum dkey;
266 CHECK_NDBM(ndbm);
267 TO_DATUM(dkey, key);
268 SCM_RESULT = dbm_delete(ndbm->dbf, dkey);
269 SCM_RETURN(Scm_MakeInteger(SCM_RESULT));
270 }
271 }
272 }
273
274 static SCM_DEFINE_STRING_CONST(ndbm_ndbm_delete__NAME, "ndbm-delete", 11, 11);
275 static SCM_DEFINE_SUBR(ndbm_ndbm_delete__STUB, 2, 0, SCM_OBJ(&ndbm_ndbm_delete__NAME), ndbm_ndbm_delete, NULL, NULL);
276
277 static ScmObj ndbm_ndbm_firstkey(ScmObj *SCM_FP, int SCM_ARGCNT, void *data_)
278 {
279 ScmObj ndbm_scm;
280 ScmNdbm* ndbm;
281 SCM_ENTER_SUBR("ndbm-firstkey");
282 ndbm_scm = SCM_ARGREF(0);
283 if (!SCM_NDBMP(ndbm_scm)) Scm_Error("<ndbm> required, but got %S", ndbm_scm);
284 ndbm = SCM_NDBM(ndbm_scm);
285 {
286 {
287 ScmObj SCM_RESULT;
288 datum dkey;
289 CHECK_NDBM(ndbm);
290 dkey = dbm_firstkey(ndbm->dbf);
291 FROM_DATUM(SCM_RESULT, dkey);
292 SCM_RETURN(SCM_OBJ_SAFE(SCM_RESULT));
293 }
294 }
295 }
296
297 static SCM_DEFINE_STRING_CONST(ndbm_ndbm_firstkey__NAME, "ndbm-firstkey", 13, 13);
298 static SCM_DEFINE_SUBR(ndbm_ndbm_firstkey__STUB, 1, 0, SCM_OBJ(&ndbm_ndbm_firstkey__NAME), ndbm_ndbm_firstkey, NULL, NULL);
299
300 static ScmObj ndbm_ndbm_nextkey(ScmObj *SCM_FP, int SCM_ARGCNT, void *data_)
301 {
302 ScmObj ndbm_scm;
303 ScmNdbm* ndbm;
304 SCM_ENTER_SUBR("ndbm-nextkey");
305 ndbm_scm = SCM_ARGREF(0);
306 if (!SCM_NDBMP(ndbm_scm)) Scm_Error("<ndbm> required, but got %S", ndbm_scm);
307 ndbm = SCM_NDBM(ndbm_scm);
308 {
309 {
310 ScmObj SCM_RESULT;
311 datum dkey;
312 CHECK_NDBM(ndbm);
313 dkey = dbm_nextkey(ndbm->dbf);
314 FROM_DATUM(SCM_RESULT, dkey);
315 SCM_RETURN(SCM_OBJ_SAFE(SCM_RESULT));
316 }
317 }
318 }
319
320 static SCM_DEFINE_STRING_CONST(ndbm_ndbm_nextkey__NAME, "ndbm-nextkey", 12, 12);
321 static SCM_DEFINE_SUBR(ndbm_ndbm_nextkey__STUB, 1, 0, SCM_OBJ(&ndbm_ndbm_nextkey__NAME), ndbm_ndbm_nextkey, NULL, NULL);
322
323 static ScmObj ndbm_ndbm_error(ScmObj *SCM_FP, int SCM_ARGCNT, void *data_)
324 {
325 ScmObj ndbm_scm;
326 ScmNdbm* ndbm;
327 SCM_ENTER_SUBR("ndbm-error");
328 ndbm_scm = SCM_ARGREF(0);
329 if (!SCM_NDBMP(ndbm_scm)) Scm_Error("<ndbm> required, but got %S", ndbm_scm);
330 ndbm = SCM_NDBM(ndbm_scm);
331 {
332 {
333 int SCM_RESULT;
334 CHECK_NDBM(ndbm);
335 SCM_RESULT = dbm_error(ndbm->dbf);
336 SCM_RETURN(Scm_MakeInteger(SCM_RESULT));
337 }
338 }
339 }
340
341 static SCM_DEFINE_STRING_CONST(ndbm_ndbm_error__NAME, "ndbm-error", 10, 10);
342 static SCM_DEFINE_SUBR(ndbm_ndbm_error__STUB, 1, 0, SCM_OBJ(&ndbm_ndbm_error__NAME), ndbm_ndbm_error, NULL, NULL);
343
344 static ScmObj ndbm_ndbm_clearerror(ScmObj *SCM_FP, int SCM_ARGCNT, void *data_)
345 {
346 ScmObj ndbm_scm;
347 ScmNdbm* ndbm;
348 SCM_ENTER_SUBR("ndbm-clearerror");
349 ndbm_scm = SCM_ARGREF(0);
350 if (!SCM_NDBMP(ndbm_scm)) Scm_Error("<ndbm> required, but got %S", ndbm_scm);
351 ndbm = SCM_NDBM(ndbm_scm);
352 {
353 CHECK_NDBM(ndbm);
354 dbm_clearerr(ndbm->dbf);
355 SCM_RETURN(SCM_UNDEFINED);
356 }
357 }
358
359 static SCM_DEFINE_STRING_CONST(ndbm_ndbm_clearerror__NAME, "ndbm-clearerror", 15, 15);
360 static SCM_DEFINE_SUBR(ndbm_ndbm_clearerror__STUB, 1, 0, SCM_OBJ(&ndbm_ndbm_clearerror__NAME), ndbm_ndbm_clearerror, NULL, NULL);
361
362 static SCM_DEFINE_STRING_CONST(ndbm_DBM_INSERT__VAR__NAME, "DBM_INSERT", 10, 10);
363 static ScmObj ndbm_DBM_INSERT__VAR = SCM_UNBOUND;
364 static SCM_DEFINE_STRING_CONST(ndbm_DBM_REPLACE__VAR__NAME, "DBM_REPLACE", 11, 11);
365 static ScmObj ndbm_DBM_REPLACE__VAR = SCM_UNBOUND;
366 static SCM_DEFINE_STRING_CONST(ndbm_O_RDONLY__VAR__NAME, "O_RDONLY", 8, 8);
367 static ScmObj ndbm_O_RDONLY__VAR = SCM_UNBOUND;
368 static SCM_DEFINE_STRING_CONST(ndbm_O_WRONLY__VAR__NAME, "O_WRONLY", 8, 8);
369 static ScmObj ndbm_O_WRONLY__VAR = SCM_UNBOUND;
370 static SCM_DEFINE_STRING_CONST(ndbm_O_RDWR__VAR__NAME, "O_RDWR", 6, 6);
371 static ScmObj ndbm_O_RDWR__VAR = SCM_UNBOUND;
372 static SCM_DEFINE_STRING_CONST(ndbm_O_CREAT__VAR__NAME, "O_CREAT", 7, 7);
373 static ScmObj ndbm_O_CREAT__VAR = SCM_UNBOUND;
374 static SCM_DEFINE_STRING_CONST(ndbm_O_TRUNC__VAR__NAME, "O_TRUNC", 7, 7);
375 static ScmObj ndbm_O_TRUNC__VAR = SCM_UNBOUND;
376 void Scm_Init_ndbm(ScmModule *module)
377 {
378
379 ndbm_O_TRUNC__VAR = Scm_Intern(&ndbm_O_TRUNC__VAR__NAME);
380 Scm_DefineConst(module, SCM_SYMBOL(SCM_OBJ(ndbm_O_TRUNC__VAR)), SCM_OBJ(Scm_MakeInteger(O_TRUNC)));
381 ndbm_O_CREAT__VAR = Scm_Intern(&ndbm_O_CREAT__VAR__NAME);
382 Scm_DefineConst(module, SCM_SYMBOL(SCM_OBJ(ndbm_O_CREAT__VAR)), SCM_OBJ(Scm_MakeInteger(O_CREAT)));
383 ndbm_O_RDWR__VAR = Scm_Intern(&ndbm_O_RDWR__VAR__NAME);
384 Scm_DefineConst(module, SCM_SYMBOL(SCM_OBJ(ndbm_O_RDWR__VAR)), SCM_OBJ(Scm_MakeInteger(O_RDWR)));
385 ndbm_O_WRONLY__VAR = Scm_Intern(&ndbm_O_WRONLY__VAR__NAME);
386 Scm_DefineConst(module, SCM_SYMBOL(SCM_OBJ(ndbm_O_WRONLY__VAR)), SCM_OBJ(Scm_MakeInteger(O_WRONLY)));
387 ndbm_O_RDONLY__VAR = Scm_Intern(&ndbm_O_RDONLY__VAR__NAME);
388 Scm_DefineConst(module, SCM_SYMBOL(SCM_OBJ(ndbm_O_RDONLY__VAR)), SCM_OBJ(Scm_MakeInteger(O_RDONLY)));
389 ndbm_DBM_REPLACE__VAR = Scm_Intern(&ndbm_DBM_REPLACE__VAR__NAME);
390 Scm_DefineConst(module, SCM_SYMBOL(SCM_OBJ(ndbm_DBM_REPLACE__VAR)), SCM_OBJ(Scm_MakeInteger(DBM_REPLACE)));
391 ndbm_DBM_INSERT__VAR = Scm_Intern(&ndbm_DBM_INSERT__VAR__NAME);
392 Scm_DefineConst(module, SCM_SYMBOL(SCM_OBJ(ndbm_DBM_INSERT__VAR)), SCM_OBJ(Scm_MakeInteger(DBM_INSERT)));
393 SCM_DEFINE(module, "ndbm-clearerror", SCM_OBJ(&ndbm_ndbm_clearerror__STUB));
394 SCM_DEFINE(module, "ndbm-error", SCM_OBJ(&ndbm_ndbm_error__STUB));
395 SCM_DEFINE(module, "ndbm-nextkey", SCM_OBJ(&ndbm_ndbm_nextkey__STUB));
396 SCM_DEFINE(module, "ndbm-firstkey", SCM_OBJ(&ndbm_ndbm_firstkey__STUB));
397 SCM_DEFINE(module, "ndbm-delete", SCM_OBJ(&ndbm_ndbm_delete__STUB));
398 SCM_DEFINE(module, "ndbm-exists?", SCM_OBJ(&ndbm_ndbm_existsP__STUB));
399 SCM_DEFINE(module, "ndbm-fetch", SCM_OBJ(&ndbm_ndbm_fetch__STUB));
400 SCM_DEFINE(module, "ndbm-store", SCM_OBJ(&ndbm_ndbm_store__STUB));
401 SCM_DEFINE(module, "ndbm-closed?", SCM_OBJ(&ndbm_ndbm_closedP__STUB));
402 SCM_DEFINE(module, "ndbm-close", SCM_OBJ(&ndbm_ndbm_close__STUB));
403 SCM_DEFINE(module, "ndbm-open", SCM_OBJ(&ndbm_ndbm_open__STUB));
404 }