4 #undef NDBM_HEADER_USES_PROTOTYPES
5 #if defined(I_GDBM_NDBM)
6 # include <gdbm-ndbm.h> /* Debian compatibility version */
7 # ifdef GDBM_NDBM_H_USES_PROTOTYPES
8 # define NDBM_HEADER_USES_PROTOTYPES
10 #elif defined(I_GDBMNDBM)
11 # include <gdbm/ndbm.h> /* RedHat compatibility version */
12 # ifdef GDBMNDBM_H_USES_PROTOTYPES
13 # define NDBM_HEADER_USES_PROTOTYPES
17 # ifdef NDBM_H_USES_PROTOTYPES
18 # define NDBM_HEADER_USES_PROTOTYPES
24 SV * filter_fetch_key ;
25 SV * filter_store_key ;
26 SV * filter_fetch_value ;
27 SV * filter_store_value ;
31 typedef NDBM_File_type * NDBM_File ;
32 typedef datum datum_key ;
33 typedef datum datum_value ;
36 #if defined(__cplusplus) && !defined(NDBM_HEADER_USES_PROTOTYPES)
37 /* gdbm's header file used for compatibility with gdbm */
38 /* isn't compatible to C++ syntax, so we need these */
39 /* declarations to make everyone happy. */
40 EXTERN_C DBM *dbm_open(const char *, int, mode_t);
41 EXTERN_C void dbm_close(DBM *);
42 EXTERN_C datum dbm_fetch(DBM *, datum);
43 EXTERN_C int dbm_store(DBM *, datum, datum, int);
44 EXTERN_C int dbm_delete(DBM *, datum);
45 EXTERN_C datum dbm_firstkey(DBM *);
46 EXTERN_C datum dbm_nextkey(DBM *);
49 MODULE = NDBM_File PACKAGE = NDBM_File PREFIX = ndbm_
52 ndbm_TIEHASH(dbtype, filename, flags, mode)
62 if ((dbp = dbm_open(filename, flags, mode))) {
63 RETVAL = (NDBM_File)safemalloc(sizeof(NDBM_File_type)) ;
64 Zero(RETVAL, 1, NDBM_File_type) ;
79 #define ndbm_FETCH(db,key) dbm_fetch(db->dbp,key)
85 #define ndbm_STORE(db,key,value,flags) dbm_store(db->dbp,key,value,flags)
87 ndbm_STORE(db, key, value, flags = DBM_REPLACE)
94 if (RETVAL < 0 && errno == EPERM)
95 croak("No write permission to ndbm file");
96 croak("ndbm store returned %d, errno %d, key \"%s\"",
97 RETVAL,errno,key.dptr);
98 dbm_clearerr(db->dbp);
101 #define ndbm_DELETE(db,key) dbm_delete(db->dbp,key)
107 #define ndbm_FIRSTKEY(db) dbm_firstkey(db->dbp)
112 #define ndbm_NEXTKEY(db,key) dbm_nextkey(db->dbp)
114 ndbm_NEXTKEY(db, key)
116 datum_key key = NO_INIT
118 #define ndbm_error(db) dbm_error(db->dbp)
123 #define ndbm_clearerr(db) dbm_clearerr(db->dbp)
130 filter_fetch_key(db, code)
133 SV * RETVAL = &PL_sv_undef ;
135 DBM_setFilter(db->filter_fetch_key, code) ;
138 filter_store_key(db, code)
141 SV * RETVAL = &PL_sv_undef ;
143 DBM_setFilter(db->filter_store_key, code) ;
146 filter_fetch_value(db, code)
149 SV * RETVAL = &PL_sv_undef ;
151 DBM_setFilter(db->filter_fetch_value, code) ;
154 filter_store_value(db, code)
157 SV * RETVAL = &PL_sv_undef ;
159 DBM_setFilter(db->filter_store_value, code) ;