12 # include <rpcsvc/dbm.h>
18 typedef void* ODBM_File;
20 #define odbm_FETCH(db,key) fetch(key)
21 #define odbm_STORE(db,key,value,flags) store(key,value)
22 #define odbm_DELETE(db,key) delete(key)
23 #define odbm_FIRSTKEY(db) firstkey()
24 #define odbm_NEXTKEY(db,key) nextkey(key)
32 MODULE = ODBM_File PACKAGE = ODBM_File PREFIX = odbm_
35 odbm_TIEHASH(dbtype, filename, flags, mode)
44 croak("Old dbm can only open one database");
45 sprintf(tmpbuf,"%s.dir",filename);
46 if (stat(tmpbuf, &statbuf) < 0) {
47 if (flags & O_CREAT) {
48 if (mode < 0 || close(creat(tmpbuf,mode)) < 0)
49 croak("ODBM_File: Can't create %s", filename);
50 sprintf(tmpbuf,"%s.pag",filename);
51 if (close(creat(tmpbuf,mode)) < 0)
52 croak("ODBM_File: Can't create %s", filename);
55 croak("ODBM_FILE: Can't open %s", filename);
57 RETVAL = (void*)(dbminit(filename) >= 0 ? &dbmrefcnt : 0);
58 ST(0) = sv_mortalcopy(&sv_undef);
59 sv_setptrobj(ST(0), RETVAL, "ODBM_File");
75 odbm_STORE(db, key, value, flags = DBM_REPLACE)
82 if (RETVAL < 0 && errno == EPERM)
83 croak("No write permission to odbm file");
84 croak("odbm store returned %d, errno %d, key \"%s\"",
85 RETVAL,errno,key.dptr);