46 int read_write= GDBM_READER;
57 read_write = GDBM_WRCREAT | GDBM_NOLOCK;
62 if (strcmp(
l->mode,
"rw")==0) mode=
"rw";
66 db = (GDBM_info *)
omAlloc0(
sizeof *db);
67 if((db->db = gdbm_open(
l->name, BLOCKSIZE, read_write, 0664, 0)) !=
NULL )
92 Print(
"%d/%s",gdbm_errno,gdbm_strerror(gdbm_errno));
99 GDBM_info *db = (GDBM_info *)
l->data;
112 GDBM_info *db = (GDBM_info *)
l->data;
138 d_value = gdbm_fetch(db->db, d_key);
146 WerrorS(
"read(`GDBM link`,`string`) expected");
154 d_key = gdbm_firstkey(db->db);
160 if (db->actual.dptr==
NULL)
162 db->actual=gdbm_firstkey(db->db);
164 d_key = gdbm_nextkey(db->db,db->actual);
176 d_value = gdbm_fetch(db->db, d_key);
203 GDBM_info *db = (GDBM_info *)
l->data;
210 if (strcmp(
l->mode,
"rw")!=0)
212 PrintS(
"Write error on readonly source\n");
238 ret = gdbm_store(db->db, d_key,
d_value, GDBM_REPLACE);
240 if (ret==-1) {
PrintS(
"reader calls gdbm_store!");}
248 Werror(
"GDBM link I/O error: '%s' ", gdbm_errno);
263 gdbm_delete(db->db, d_key);
269 WerrorS(
"write(`GDBM link`,`key string` [,`data string`]) expected");
287 const char *mode =
"r";
289 int dbm_flags = O_RDONLY | O_CREAT;
292 && ((
l->mode[0]==
'w')||(
l->mode[1]==
'w')))
294 dbm_flags = O_RDWR | O_CREAT;
313 l->data=(
void *)(db);
355 WerrorS(
"read(`DBM link`,`string`) expected");
412 Werror(
"DBM link I/O error. Is '%s' readonly?",
l->name);
430 WerrorS(
"write(`DBM link`,`key string` [,`data string`]) expected");
int dbm_store(register DBM *db, datum key, datum dat, int replace)
DBM * dbm_open(char *file, int flags, int mode)
Class used for (list of) interpreter objects.
#define SI_LINK_CLOSE_P(l)
#define SI_LINK_R_OPEN_P(l)
#define omFreeSize(addr, size)
#define SI_LINK_RW_OPEN_P(l)
#define SI_LINK_SET_R_OPEN_P(l)
LINKAGE leftv dbRead1(si_link l)
void WerrorS(const char *s)
#define SI_LINK_SET_CLOSE_P(l)
LINKAGE leftv dbRead2(si_link l, leftv key)
LINKAGE BOOLEAN dbClose(si_link l)
datum dbm_fetch(register DBM *db, datum key)
datum dbm_nextkey(register DBM *db)
void PrintS(const char *s)
LINKAGE BOOLEAN dbOpen(si_link l, short flag, leftv)
#define SI_LINK_SET_W_OPEN_P(l)
const Variable & v
< [in] a sqrfree bivariate poly
#define SI_LINK_SET_RW_OPEN_P(l)
int dbm_delete(register DBM *db, datum key)
#define SI_LINK_W_OPEN_P(l)
datum dbm_firstkey(DBM *db)
LINKAGE BOOLEAN dbWrite(si_link l, leftv key)
void Werror(const char *fmt,...)