4 #undef NDBM_HEADER_USES_PROTOTYPES
5 #if defined(I_GDBM_NDBM)
6 # ifdef GDBM_NDBM_H_USES_PROTOTYPES
7 # define NDBM_HEADER_USES_PROTOTYPES
10 # include <gdbm-ndbm.h> /* Debian compatibility version */
11 #elif defined(I_GDBMNDBM)
12 # ifdef GDBMNDBM_H_USES_PROTOTYPES
13 # define NDBM_HEADER_USES_PROTOTYPES
16 # include <gdbm/ndbm.h> /* RedHat compatibility version */
18 # ifdef NDBM_H_USES_PROTOTYPES
19 # define NDBM_HEADER_USES_PROTOTYPES
24 #ifdef NDBM_HEADER_USES_PROTOTYPES
30 SV * filter_fetch_key ;
31 SV * filter_store_key ;
32 SV * filter_fetch_value ;
33 SV * filter_store_value ;
37 typedef NDBM_File_type * NDBM_File ;
38 typedef datum datum_key ;
39 typedef datum datum_value ;
42 #if defined(__cplusplus) && !defined(NDBM_HEADER_USES_PROTOTYPES)
43 /* gdbm's header file used for compatibility with gdbm */
44 /* isn't compatible to C++ syntax, so we need these */
45 /* declarations to make everyone happy. */
46 EXTERN_C DBM *dbm_open(const char *, int, mode_t);
47 EXTERN_C void dbm_close(DBM *);
48 EXTERN_C datum dbm_fetch(DBM *, datum);
49 EXTERN_C int dbm_store(DBM *, datum, datum, int);
50 EXTERN_C int dbm_delete(DBM *, datum);
51 EXTERN_C datum dbm_firstkey(DBM *);
52 EXTERN_C datum dbm_nextkey(DBM *);
55 MODULE = NDBM_File PACKAGE = NDBM_File PREFIX = ndbm_
58 ndbm_TIEHASH(dbtype, filename, flags, mode)
68 if ((dbp = dbm_open(filename, flags, mode))) {
69 RETVAL = (NDBM_File)safemalloc(sizeof(NDBM_File_type)) ;
70 Zero(RETVAL, 1, NDBM_File_type) ;
85 #define ndbm_FETCH(db,key) dbm_fetch(db->dbp,key)
91 #define ndbm_STORE(db,key,value,flags) dbm_store(db->dbp,key,value,flags)
93 ndbm_STORE(db, key, value, flags = DBM_REPLACE)
100 if (RETVAL < 0 && errno == EPERM)
101 croak("No write permission to ndbm file");
102 croak("ndbm store returned %d, errno %d, key \"%s\"",
103 RETVAL,errno,key.dptr);
104 dbm_clearerr(db->dbp);
107 #define ndbm_DELETE(db,key) dbm_delete(db->dbp,key)
113 #define ndbm_FIRSTKEY(db) dbm_firstkey(db->dbp)
118 #define ndbm_NEXTKEY(db,key) dbm_nextkey(db->dbp)
120 ndbm_NEXTKEY(db, key)
122 datum_key key = NO_INIT
124 #define ndbm_error(db) dbm_error(db->dbp)
129 #define ndbm_clearerr(db) dbm_clearerr(db->dbp)
136 filter_fetch_key(db, code)
139 SV * RETVAL = &PL_sv_undef ;
141 DBM_setFilter(db->filter_fetch_key, code) ;
144 filter_store_key(db, code)
147 SV * RETVAL = &PL_sv_undef ;
149 DBM_setFilter(db->filter_store_key, code) ;
152 filter_fetch_value(db, code)
155 SV * RETVAL = &PL_sv_undef ;
157 DBM_setFilter(db->filter_fetch_value, code) ;
160 filter_store_value(db, code)
163 SV * RETVAL = &PL_sv_undef ;
165 DBM_setFilter(db->filter_store_value, code) ;