12 typedef void* ODBM_File;
14 #define odbm_FETCH(db,key) fetch(key)
15 #define odbm_STORE(db,key,value,flags) store(key,value)
16 #define odbm_DELETE(db,key) delete(key)
17 #define odbm_FIRSTKEY(db) firstkey()
18 #define odbm_NEXTKEY(db,key) nextkey(key)
26 MODULE = ODBM_File PACKAGE = ODBM_File PREFIX = odbm_
29 odbm_TIEHASH(dbtype, filename, flags, mode)
38 croak("Old dbm can only open one database");
39 sprintf(tmpbuf,"%s.dir",filename);
40 if (stat(tmpbuf, &statbuf) < 0) {
41 if (flags & O_CREAT) {
42 if (mode < 0 || close(creat(tmpbuf,mode)) < 0)
43 croak("ODBM_File: Can't create %s", filename);
44 sprintf(tmpbuf,"%s.pag",filename);
45 if (close(creat(tmpbuf,mode)) < 0)
46 croak("ODBM_File: Can't create %s", filename);
49 croak("ODBM_FILE: Can't open %s", filename);
51 RETVAL = (void*)(dbminit(filename) >= 0 ? &dbmrefcnt : 0);
52 ST(0) = sv_mortalcopy(&sv_undef);
53 sv_setptrobj(ST(0), RETVAL, "ODBM_File");
69 odbm_STORE(db, key, value, flags = DBM_REPLACE)
76 if (RETVAL < 0 && errno == EPERM)
77 croak("No write permission to odbm file");
78 croak("odbm store returned %d, errno %d, key \"%s\"",
79 RETVAL,errno,key.dptr);