My Project  UNKNOWN_GIT_VERSION
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

◆ dbClose()

LINKAGE BOOLEAN dbClose ( si_link  l)

Definition at line 320 of file sing_dbm.cc.

321 {
322  DBM_info *db = (DBM_info *)l->data;
323 
324  dbm_close(db->db);
325  omFreeSize((ADDRESS)db,(sizeof *db));
326  l->data=NULL;
328  return FALSE;
329 }

◆ dbOpen()

LINKAGE BOOLEAN dbOpen ( si_link  l,
short  flag,
leftv  u 
)

Definition at line 283 of file sing_dbm.cc.

284 {
285  const char *mode = "r";
286  DBM_info *db;
287  int dbm_flags = O_RDONLY | O_CREAT; // open database readonly as default
288 
289  if((l->mode!=NULL)
290  && ((l->mode[0]=='w')||(l->mode[1]=='w')))
291  {
292  dbm_flags = O_RDWR | O_CREAT;
293  mode = "rw";
295  }
296  else if(flag & SI_LINK_WRITE)
297  {
298  // request w- open, but mode is not "w" nor "rw" => fail
299  return TRUE;
300  }
301  //if (((db = (DBM_info *)omAlloc(sizeof *db)) != NULL)
302  //&&((db->db = dbm_open(l->name, dbm_flags, 0664 )) != NULL ))
303  db = (DBM_info *)omAlloc(sizeof *db);
304  if((db->db = dbm_open(l->name, dbm_flags, 0664 )) != NULL )
305  {
306  db->first=1;
307  if(flag & SI_LINK_WRITE)
309  else
311  l->data=(void *)(db);
312  omFree(l->mode);
313  l->mode=omStrDup(mode);
314  return FALSE;
315  }
316  return TRUE;
317 }

◆ dbRead1()

LINKAGE leftv dbRead1 ( si_link  l)

Definition at line 379 of file sing_dbm.cc.

380 {
381  return dbRead2(l,NULL);
382 }

◆ dbRead2()

LINKAGE leftv dbRead2 ( si_link  l,
leftv  key 
)

Definition at line 333 of file sing_dbm.cc.

334 {
335  DBM_info *db = (DBM_info *)l->data;
336  leftv v=NULL;
337  datum d_key;
338 
339  if(key!=NULL)
340  {
341  if (key->Typ()==STRING_CMD)
342  {
343  d_key.dptr = (char*)key->Data();
344  d_key.dsize = strlen(d_key.dptr)+1;
345  d_value = dbm_fetch(db->db, d_key);
347  if (d_value.dptr!=NULL) v->data=omStrDup(d_value.dptr);
348  else v->data=omStrDup("");
349  v->rtyp=STRING_CMD;
350  }
351  else
352  {
353  WerrorS("read(`DBM link`,`string`) expected");
354  }
355  }
356  else
357  {
358  if(db->first)
359  d_value = dbm_firstkey((DBM *)db->db);
360  else
361  d_value = dbm_nextkey((DBM *)db->db);
362 
364  v->rtyp=STRING_CMD;
365  if (d_value.dptr!=NULL)
366  {
367  v->data=omStrDup(d_value.dptr);
368  db->first = 0;
369  }
370  else
371  {
372  v->data=omStrDup("");
373  db->first = 1;
374  }
375 
376  }
377  return v;
378 }

◆ dbWrite()

LINKAGE BOOLEAN dbWrite ( si_link  l,
leftv  v 
)

Definition at line 384 of file sing_dbm.cc.

385 {
386  DBM_info *db = (DBM_info *)l->data;
387  BOOLEAN b=TRUE;
388  register int ret;
389 
390  // database is opened
391  if((key!=NULL) && (key->Typ()==STRING_CMD) )
392  {
393  if (key->next!=NULL) // have a second parameter ?
394  {
395  if(key->next->Typ()==STRING_CMD) // replace (key,value)
396  {
397  datum d_key, d_value;
398 
399  d_key.dptr = (char *)key->Data();
400  d_key.dsize = strlen(d_key.dptr)+1;
401  d_value.dptr = (char *)key->next->Data();
402  d_value.dsize = strlen(d_value.dptr)+1;
403  ret = dbm_store(db->db, d_key, d_value, DBM_REPLACE);
404  if(!ret )
405  b=FALSE;
406  else
407  {
408  if(dbm_error(db->db))
409  {
410  Werror("DBM link I/O error. Is '%s' readonly?", l->name);
411  dbm_clearerr(db->db);
412  }
413  }
414  }
415  }
416  else
417  { // delete (key)
418  datum d_key;
419 
420  d_key.dptr = (char *)key->Data();
421  d_key.dsize = strlen(d_key.dptr)+1;
422  dbm_delete(db->db, d_key);
423  b=FALSE;
424  }
425  }
426  else
427  {
428  WerrorS("write(`DBM link`,`key string` [,`data string`]) expected");
429  }
430  return b;
431 }
FALSE
#define FALSE
Definition: auxiliary.h:94
sleftv::Data
void * Data()
Definition: subexpr.cc:1182
omFree
#define omFree(addr)
Definition: omAllocDecl.h:261
dbRead2
LINKAGE leftv dbRead2(si_link l, leftv key)
Definition: sing_dbm.cc:333
DBM
Definition: ndbm.h:54
ADDRESS
void * ADDRESS
Definition: auxiliary.h:133
dbm_nextkey
datum dbm_nextkey(DBM *db)
Definition: ndbm.cc:260
STRING_CMD
@ STRING_CMD
Definition: tok.h:183
dbm_error
#define dbm_error(db)
Definition: ndbm.h:75
dbm_store
int dbm_store(DBM *db, datum key, datum dat, int replace)
Definition: ndbm.cc:167
omStrDup
#define omStrDup(s)
Definition: omAllocDecl.h:263
DBM_REPLACE
#define DBM_REPLACE
Definition: ndbm.h:92
omAlloc0Bin
#define omAlloc0Bin(bin)
Definition: omAllocDecl.h:206
sleftv
Class used for (list of) interpreter objects.
Definition: subexpr.h:83
b
CanonicalForm b
Definition: cfModGcd.cc:4044
datum
Definition: ndbm.h:83
leftv
sleftv * leftv
Definition: structs.h:60
DBM_info
Definition: sing_dbm.cc:277
TRUE
#define TRUE
Definition: auxiliary.h:98
dbm_delete
int dbm_delete(DBM *db, datum key)
Definition: ndbm.cc:139
omFreeSize
#define omFreeSize(addr, size)
Definition: omAllocDecl.h:260
BOOLEAN
int BOOLEAN
Definition: auxiliary.h:85
DBM_info::first
int first
Definition: sing_dbm.cc:281
d_value
static datum d_value
Definition: sing_dbm.cc:332
omAlloc
#define omAlloc(size)
Definition: omAllocDecl.h:210
DBM_info::db
DBM * db
Definition: sing_dbm.cc:280
datum::dptr
char * dptr
Definition: ndbm.h:84
dbm_close
void dbm_close(DBM *db)
Definition: ndbm.cc:97
Werror
void Werror(const char *fmt,...)
Definition: reporter.cc:189
WerrorS
void WerrorS(const char *s)
Definition: feFopen.cc:24
sleftv::Typ
int Typ()
Definition: subexpr.cc:1039
dbm_firstkey
datum dbm_firstkey(DBM *db)
Definition: ndbm.cc:252
NULL
#define NULL
Definition: omList.c:10
l
int l
Definition: cfEzgcd.cc:93
v
const Variable & v
< [in] a sqrfree bivariate poly
Definition: facBivar.h:37
sleftv_bin
omBin sleftv_bin
Definition: subexpr.cc:47
dbm_fetch
datum dbm_fetch(DBM *db, datum key)
Definition: ndbm.cc:119
dbm_open
DBM * dbm_open(char *file, int flags, int mode)
Definition: ndbm.cc:59
datum::dsize
int dsize
Definition: ndbm.h:85
dbm_clearerr
#define dbm_clearerr(db)
Definition: ndbm.h:77