8 SV * filter_fetch_key ;
9 SV * filter_store_key ;
10 SV * filter_fetch_value ;
11 SV * filter_store_value ;
15 typedef NDBM_File_type * NDBM_File ;
16 typedef datum datum_key ;
17 typedef datum datum_value ;
20 #if defined(__cplusplus) && defined(HAS_GDBM)
21 /* gdbm's header file used for compatibility with gdbm */
22 /* isn't compatible to C++ syntax, so we need these */
23 /* declarations to make everyone happy. */
24 EXTERN_C DBM *dbm_open(const char *, int, mode_t);
25 EXTERN_C void dbm_close(DBM *);
26 EXTERN_C datum dbm_fetch(DBM *, datum);
27 EXTERN_C int dbm_store(DBM *, datum, datum, int);
28 EXTERN_C int dbm_delete(DBM *, datum);
29 EXTERN_C datum dbm_firstkey(DBM *);
30 EXTERN_C datum dbm_nextkey(DBM *);
33 MODULE = NDBM_File PACKAGE = NDBM_File PREFIX = ndbm_
36 ndbm_TIEHASH(dbtype, filename, flags, mode)
46 if ((dbp = dbm_open(filename, flags, mode))) {
47 RETVAL = (NDBM_File)safemalloc(sizeof(NDBM_File_type)) ;
48 Zero(RETVAL, 1, NDBM_File_type) ;
63 #define ndbm_FETCH(db,key) dbm_fetch(db->dbp,key)
69 #define ndbm_STORE(db,key,value,flags) dbm_store(db->dbp,key,value,flags)
71 ndbm_STORE(db, key, value, flags = DBM_REPLACE)
78 if (RETVAL < 0 && errno == EPERM)
79 croak("No write permission to ndbm file");
80 croak("ndbm store returned %d, errno %d, key \"%s\"",
81 RETVAL,errno,key.dptr);
82 dbm_clearerr(db->dbp);
85 #define ndbm_DELETE(db,key) dbm_delete(db->dbp,key)
91 #define ndbm_FIRSTKEY(db) dbm_firstkey(db->dbp)
96 #define ndbm_NEXTKEY(db,key) dbm_nextkey(db->dbp)
100 datum_key key = NO_INIT
102 #define ndbm_error(db) dbm_error(db->dbp)
107 #define ndbm_clearerr(db) dbm_clearerr(db->dbp)
114 filter_fetch_key(db, code)
117 SV * RETVAL = &PL_sv_undef ;
119 DBM_setFilter(db->filter_fetch_key, code) ;
122 filter_store_key(db, code)
125 SV * RETVAL = &PL_sv_undef ;
127 DBM_setFilter(db->filter_store_key, code) ;
130 filter_fetch_value(db, code)
133 SV * RETVAL = &PL_sv_undef ;
135 DBM_setFilter(db->filter_fetch_value, code) ;
138 filter_store_value(db, code)
141 SV * RETVAL = &PL_sv_undef ;
143 DBM_setFilter(db->filter_store_value, code) ;