44 int read_write= GDBM_READER;
55 read_write = GDBM_WRCREAT | GDBM_NOLOCK;
60 if (strcmp(
l->mode,
"rw")==0) mode=
"rw";
64 db = (GDBM_info *)
omAlloc0(
sizeof *db);
65 if((db->db = gdbm_open(
l->name, BLOCKSIZE, read_write, 0664, 0)) !=
NULL )
90 Print(
"%d/%s",gdbm_errno,gdbm_strerror(gdbm_errno));
97 GDBM_info *db = (GDBM_info *)
l->data;
110 GDBM_info *db = (GDBM_info *)
l->data;
134 d_key.
dptr = (
char*)key->Data();
136 d_value = gdbm_fetch(db->db, d_key);
144 WerrorS(
"read(`GDBM link`,`string`) expected");
152 d_key = gdbm_firstkey(db->db);
158 if (db->actual.dptr==
NULL)
160 db->actual=gdbm_firstkey(db->db);
162 d_key = gdbm_nextkey(db->db,db->actual);
174 d_value = gdbm_fetch(db->db, d_key);
201 GDBM_info *db = (GDBM_info *)
l->data;
208 if (strcmp(
l->mode,
"rw")!=0)
210 PrintS(
"Write error on readonly source\n");
232 d_key.
dptr = (
char *)key->Data();
234 d_value.dptr = (
char *)key->next->Data();
236 ret = gdbm_store(db->db, d_key,
d_value, GDBM_REPLACE);
238 if (ret==-1) {
PrintS(
"reader calls gdbm_store!");}
246 Werror(
"GDBM link I/O error: '%s' ", gdbm_errno);
258 d_key.
dptr = (
char *)key->Data();
261 gdbm_delete(db->db, d_key);
267 WerrorS(
"write(`GDBM link`,`key string` [,`data string`]) expected");
285 const char *mode =
"r";
287 int dbm_flags = O_RDONLY | O_CREAT;
290 && ((
l->mode[0]==
'w')||(
l->mode[1]==
'w')))
292 dbm_flags = O_RDWR | O_CREAT;
311 l->data=(
void *)(db);
353 WerrorS(
"read(`DBM link`,`string`) expected");
410 Werror(
"DBM link I/O error. Is '%s' readonly?",
l->name);
428 WerrorS(
"write(`DBM link`,`key string` [,`data string`]) expected");
const Variable & v
< [in] a sqrfree bivariate poly
void WerrorS(const char *s)
EXTERN_VAR omBin sleftv_bin
int dbm_store(DBM *db, datum key, datum dat, int replace)
datum dbm_fetch(DBM *db, datum key)
int dbm_delete(DBM *db, datum key)
datum dbm_nextkey(DBM *db)
datum dbm_firstkey(DBM *db)
DBM * dbm_open(char *file, int flags, int mode)
#define omFreeSize(addr, size)
#define omFreeBinAddr(addr)
void PrintS(const char *s)
void Werror(const char *fmt,...)
#define SI_LINK_W_OPEN_P(l)
#define SI_LINK_SET_R_OPEN_P(l)
#define SI_LINK_SET_CLOSE_P(l)
#define SI_LINK_RW_OPEN_P(l)
#define SI_LINK_R_OPEN_P(l)
#define SI_LINK_SET_RW_OPEN_P(l)
#define SI_LINK_SET_W_OPEN_P(l)
#define SI_LINK_CLOSE_P(l)
LINKAGE BOOLEAN dbClose(si_link l)
LINKAGE BOOLEAN dbWrite(si_link l, leftv key)
LINKAGE leftv dbRead1(si_link l)
LINKAGE BOOLEAN dbOpen(si_link l, short flag, leftv)
LINKAGE leftv dbRead2(si_link l, leftv key)