19 typedef GDBM_File_type * GDBM_File ;
20 typedef datum datum_key ;
21 typedef datum datum_value ;
22 typedef datum datum_key_copy;
24 #define GDBM_BLOCKSIZE 0 /* gdbm defaults to stat blocksize */
26 typedef void (*FATALFUNC)();
32 croak("GDBM_File::%s not implemented on this architecture", s);
37 /* GDBM allocates the datum with system malloc() and expects the user
38 * to free() it. So we either have to free() it immediately, or have
39 * perl free() it when it deallocates the SV, depending on whether
40 * perl uses malloc()/free() or not. */
42 output_datum(pTHX_ SV *arg, char *str, int size)
44 sv_setpvn(arg, str, size);
49 /* Versions of gdbm prior to 1.7x might not have the gdbm_sync,
50 gdbm_exists, and gdbm_setopt functions. Apparently Slackware
51 (Linux) 2.1 contains gdbm-1.5 (which dates back to 1991).
54 #define gdbm_exists(db,key) not_here("gdbm_exists")
55 #define gdbm_sync(db) (void) not_here("gdbm_sync")
56 #define gdbm_setopt(db,optflag,optval,optlen) not_here("gdbm_setopt")
59 #include "const-c.inc"
61 MODULE = GDBM_File PACKAGE = GDBM_File PREFIX = gdbm_
66 gdbm_TIEHASH(dbtype, name, read_write, mode, fatal_func = (FATALFUNC)croak)
77 if ((dbp = gdbm_open(name, GDBM_BLOCKSIZE, read_write, mode, fatal_func))) {
78 RETVAL = (GDBM_File)safecalloc(1, sizeof(GDBM_File_type)) ;
87 #define gdbm_close(db) gdbm_close(db->dbp)
102 SvREFCNT_dec(db->filter[i]);
106 #define gdbm_FETCH(db,key) gdbm_fetch(db->dbp,key)
112 #define gdbm_STORE(db,key,value,flags) gdbm_store(db->dbp,key,value,flags)
114 gdbm_STORE(db, key, value, flags = GDBM_REPLACE)
121 if (RETVAL < 0 && errno == EPERM)
122 croak("No write permission to gdbm file");
123 croak("gdbm store returned %d, errno %d, key \"%.*s\"",
124 RETVAL,errno,key.dsize,key.dptr);
127 #define gdbm_DELETE(db,key) gdbm_delete(db->dbp,key)
133 #define gdbm_FIRSTKEY(db) gdbm_firstkey(db->dbp)
138 #define gdbm_NEXTKEY(db,key) gdbm_nextkey(db->dbp,key)
140 gdbm_NEXTKEY(db, key)
144 #define gdbm_reorganize(db) gdbm_reorganize(db->dbp)
150 #define gdbm_sync(db) gdbm_sync(db->dbp)
155 #define gdbm_EXISTS(db,key) gdbm_exists(db->dbp,key)
161 #define gdbm_setopt(db,optflag, optval, optlen) gdbm_setopt(db->dbp,optflag, optval, optlen)
163 gdbm_setopt (db, optflag, optval, optlen)
171 filter_fetch_key(db, code)
174 SV * RETVAL = &PL_sv_undef ;
176 GDBM_File::filter_fetch_key = fetch_key
177 GDBM_File::filter_store_key = store_key
178 GDBM_File::filter_fetch_value = fetch_value
179 GDBM_File::filter_store_value = store_value
181 DBM_setFilter(db->filter[ix], code);