4 #if defined(I_GDBM_NDBM)
5 # include <gdbm-ndbm.h> /* Debian compatibility version */
6 #elif defined(I_GDBMNDBM)
7 # include <gdbm/ndbm.h> /* RedHat compatibility version */
14 SV * filter_fetch_key ;
15 SV * filter_store_key ;
16 SV * filter_fetch_value ;
17 SV * filter_store_value ;
21 typedef NDBM_File_type * NDBM_File ;
22 typedef datum datum_key ;
23 typedef datum datum_value ;
26 #if defined(__cplusplus) && defined(HAS_GDBM)
27 /* gdbm's header file used for compatibility with gdbm */
28 /* isn't compatible to C++ syntax, so we need these */
29 /* declarations to make everyone happy. */
30 EXTERN_C DBM *dbm_open(const char *, int, mode_t);
31 EXTERN_C void dbm_close(DBM *);
32 EXTERN_C datum dbm_fetch(DBM *, datum);
33 EXTERN_C int dbm_store(DBM *, datum, datum, int);
34 EXTERN_C int dbm_delete(DBM *, datum);
35 EXTERN_C datum dbm_firstkey(DBM *);
36 EXTERN_C datum dbm_nextkey(DBM *);
39 MODULE = NDBM_File PACKAGE = NDBM_File PREFIX = ndbm_
42 ndbm_TIEHASH(dbtype, filename, flags, mode)
52 if ((dbp = dbm_open(filename, flags, mode))) {
53 RETVAL = (NDBM_File)safemalloc(sizeof(NDBM_File_type)) ;
54 Zero(RETVAL, 1, NDBM_File_type) ;
69 #define ndbm_FETCH(db,key) dbm_fetch(db->dbp,key)
75 #define ndbm_STORE(db,key,value,flags) dbm_store(db->dbp,key,value,flags)
77 ndbm_STORE(db, key, value, flags = DBM_REPLACE)
84 if (RETVAL < 0 && errno == EPERM)
85 croak("No write permission to ndbm file");
86 croak("ndbm store returned %d, errno %d, key \"%s\"",
87 RETVAL,errno,key.dptr);
88 dbm_clearerr(db->dbp);
91 #define ndbm_DELETE(db,key) dbm_delete(db->dbp,key)
97 #define ndbm_FIRSTKEY(db) dbm_firstkey(db->dbp)
102 #define ndbm_NEXTKEY(db,key) dbm_nextkey(db->dbp)
104 ndbm_NEXTKEY(db, key)
106 datum_key key = NO_INIT
108 #define ndbm_error(db) dbm_error(db->dbp)
113 #define ndbm_clearerr(db) dbm_clearerr(db->dbp)
120 filter_fetch_key(db, code)
123 SV * RETVAL = &PL_sv_undef ;
125 DBM_setFilter(db->filter_fetch_key, code) ;
128 filter_store_key(db, code)
131 SV * RETVAL = &PL_sv_undef ;
133 DBM_setFilter(db->filter_store_key, code) ;
136 filter_fetch_value(db, code)
139 SV * RETVAL = &PL_sv_undef ;
141 DBM_setFilter(db->filter_fetch_value, code) ;
144 filter_store_value(db, code)
147 SV * RETVAL = &PL_sv_undef ;
149 DBM_setFilter(db->filter_store_value, code) ;