Functions
dbm_sl.h File Reference

Go to the source code of this file.

Functions

LINKAGE BOOLEAN dbOpen (si_link l, short flag, leftv u)
 
LINKAGE BOOLEAN dbWrite (si_link l, leftv v)
 
LINKAGE leftv dbRead1 (si_link l)
 
LINKAGE leftv dbRead2 (si_link l, leftv key)
 
LINKAGE BOOLEAN dbClose (si_link l)
 

Function Documentation

LINKAGE BOOLEAN dbClose ( si_link  l)

Definition at line 322 of file sing_dbm.cc.

323 {
324  DBM_info *db = (DBM_info *)l->data;
325 
326  dbm_close(db->db);
327  omFreeSize((ADDRESS)db,(sizeof *db));
328  l->data=NULL;
330  return FALSE;
331 }
void dbm_close(DBM *db)
Definition: ndbm.cc:110
#define FALSE
Definition: auxiliary.h:140
#define omFreeSize(addr, size)
Definition: omAllocDecl.h:260
void * ADDRESS
Definition: auxiliary.h:161
DBM * db
Definition: sing_dbm.cc:280
#define NULL
Definition: omList.c:10
int l
Definition: cfEzgcd.cc:94
LINKAGE BOOLEAN dbOpen ( si_link  l,
short  flag,
leftv  u 
)

Definition at line 285 of file sing_dbm.cc.

286 {
287  const char *mode = "r";
288  DBM_info *db;
289  int dbm_flags = O_RDONLY | O_CREAT; // open database readonly as default
290 
291  if((l->mode!=NULL)
292  && ((l->mode[0]=='w')||(l->mode[1]=='w')))
293  {
294  dbm_flags = O_RDWR | O_CREAT;
295  mode = "rw";
297  }
298  else if(flag & SI_LINK_WRITE)
299  {
300  // request w- open, but mode is not "w" nor "rw" => fail
301  return TRUE;
302  }
303  //if (((db = (DBM_info *)omAlloc(sizeof *db)) != NULL)
304  //&&((db->db = dbm_open(l->name, dbm_flags, 0664 )) != NULL ))
305  db = (DBM_info *)omAlloc(sizeof *db);
306  if((db->db = dbm_open(l->name, dbm_flags, 0664 )) != NULL )
307  {
308  db->first=1;
309  if(flag & SI_LINK_WRITE)
311  else
313  l->data=(void *)(db);
314  omFree(l->mode);
315  l->mode=omStrDup(mode);
316  return FALSE;
317  }
318  return TRUE;
319 }
DBM * dbm_open(char *file, int flags, int mode)
Definition: ndbm.cc:72
#define FALSE
Definition: auxiliary.h:140
#define TRUE
Definition: auxiliary.h:144
#define omAlloc(size)
Definition: omAllocDecl.h:210
DBM * db
Definition: sing_dbm.cc:280
#define omFree(addr)
Definition: omAllocDecl.h:261
#define NULL
Definition: omList.c:10
int first
Definition: sing_dbm.cc:281
int l
Definition: cfEzgcd.cc:94
#define omStrDup(s)
Definition: omAllocDecl.h:263
LINKAGE leftv dbRead1 ( si_link  l)

Definition at line 381 of file sing_dbm.cc.

382 {
383  return dbRead2(l,NULL);
384 }
LINKAGE leftv dbRead2(si_link l, leftv key)
Definition: sing_dbm.cc:335
#define NULL
Definition: omList.c:10
int l
Definition: cfEzgcd.cc:94
LINKAGE leftv dbRead2 ( si_link  l,
leftv  key 
)

Definition at line 335 of file sing_dbm.cc.

336 {
337  DBM_info *db = (DBM_info *)l->data;
338  leftv v=NULL;
339  datum d_key;
340 
341  if(key!=NULL)
342  {
343  if (key->Typ()==STRING_CMD)
344  {
345  d_key.dptr = (char*)key->Data();
346  d_key.dsize = strlen(d_key.dptr)+1;
347  d_value = dbm_fetch(db->db, d_key);
349  if (d_value.dptr!=NULL) v->data=omStrDup(d_value.dptr);
350  else v->data=omStrDup("");
351  v->rtyp=STRING_CMD;
352  }
353  else
354  {
355  WerrorS("read(`DBM link`,`string`) expected");
356  }
357  }
358  else
359  {
360  if(db->first)
361  d_value = dbm_firstkey((DBM *)db->db);
362  else
363  d_value = dbm_nextkey((DBM *)db->db);
364 
366  v->rtyp=STRING_CMD;
367  if (d_value.dptr!=NULL)
368  {
369  v->data=omStrDup(d_value.dptr);
370  db->first = 0;
371  }
372  else
373  {
374  v->data=omStrDup("");
375  db->first = 1;
376  }
377 
378  }
379  return v;
380 }
static datum d_value
Definition: sing_dbm.cc:334
Class used for (list of) interpreter objects.
Definition: subexpr.h:83
sleftv * leftv
Definition: structs.h:60
void WerrorS(const char *s)
Definition: feFopen.cc:24
int Typ()
Definition: subexpr.cc:969
Definition: ndbm.h:54
char * dptr
Definition: ndbm.h:84
DBM * db
Definition: sing_dbm.cc:280
datum dbm_fetch(register DBM *db, datum key)
Definition: ndbm.cc:132
datum dbm_nextkey(register DBM *db)
Definition: ndbm.cc:273
omBin sleftv_bin
Definition: subexpr.cc:50
#define omAlloc0Bin(bin)
Definition: omAllocDecl.h:206
const Variable & v
< [in] a sqrfree bivariate poly
Definition: facBivar.h:37
#define NULL
Definition: omList.c:10
void * Data()
Definition: subexpr.cc:1111
Definition: ndbm.h:83
datum dbm_firstkey(DBM *db)
Definition: ndbm.cc:265
int first
Definition: sing_dbm.cc:281
int l
Definition: cfEzgcd.cc:94
#define omStrDup(s)
Definition: omAllocDecl.h:263
LINKAGE BOOLEAN dbWrite ( si_link  l,
leftv  v 
)

Definition at line 386 of file sing_dbm.cc.

387 {
388  DBM_info *db = (DBM_info *)l->data;
389  BOOLEAN b=TRUE;
390  register int ret;
391 
392  // database is opened
393  if((key!=NULL) && (key->Typ()==STRING_CMD) )
394  {
395  if (key->next!=NULL) // have a second parameter ?
396  {
397  if(key->next->Typ()==STRING_CMD) // replace (key,value)
398  {
399  datum d_key, d_value;
400 
401  d_key.dptr = (char *)key->Data();
402  d_key.dsize = strlen(d_key.dptr)+1;
403  d_value.dptr = (char *)key->next->Data();
404  d_value.dsize = strlen(d_value.dptr)+1;
405  ret = dbm_store(db->db, d_key, d_value, DBM_REPLACE);
406  if(!ret )
407  b=FALSE;
408  else
409  {
410  if(dbm_error(db->db))
411  {
412  Werror("DBM link I/O error. Is '%s' readonly?", l->name);
413  dbm_clearerr(db->db);
414  }
415  }
416  }
417  }
418  else
419  { // delete (key)
420  datum d_key;
421 
422  d_key.dptr = (char *)key->Data();
423  d_key.dsize = strlen(d_key.dptr)+1;
424  dbm_delete(db->db, d_key);
425  b=FALSE;
426  }
427  }
428  else
429  {
430  WerrorS("write(`DBM link`,`key string` [,`data string`]) expected");
431  }
432  return b;
433 }
int dbm_store(register DBM *db, datum key, datum dat, int replace)
Definition: ndbm.cc:180
static datum d_value
Definition: sing_dbm.cc:334
#define DBM_REPLACE
Definition: ndbm.h:92
#define FALSE
Definition: auxiliary.h:140
#define TRUE
Definition: auxiliary.h:144
void WerrorS(const char *s)
Definition: feFopen.cc:24
char * dptr
Definition: ndbm.h:84
DBM * db
Definition: sing_dbm.cc:280
int dsize
Definition: ndbm.h:85
#define dbm_clearerr(db)
Definition: ndbm.h:77
#define NULL
Definition: omList.c:10
int dbm_delete(register DBM *db, datum key)
Definition: ndbm.cc:152
Definition: ndbm.h:83
#define dbm_error(db)
Definition: ndbm.h:75
int BOOLEAN
Definition: auxiliary.h:131
const poly b
Definition: syzextra.cc:213
void Werror(const char *fmt,...)
Definition: reporter.cc:199
int l
Definition: cfEzgcd.cc:94