My Project
Loading...
Searching...
No Matches
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}
#define FALSE
Definition auxiliary.h:97
void * ADDRESS
Definition auxiliary.h:120
int l
Definition cfEzgcd.cc:100
void dbm_close(DBM *db)
Definition ndbm.cc:97
#define omFreeSize(addr, size)
#define NULL
Definition omList.c:12

◆ 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 omFreeBinAddr(l->mode);
313 l->mode=omStrDup(mode);
314 return FALSE;
315 }
316 return TRUE;
317}
#define TRUE
Definition auxiliary.h:101
DBM * dbm_open(char *file, int flags, int mode)
Definition ndbm.cc:59
#define omStrDup(s)
#define omAlloc(size)
#define omFreeBinAddr(addr)
int first
Definition sing_dbm.cc:279
DBM * db
Definition sing_dbm.cc:278

◆ dbRead1()

LINKAGE leftv dbRead1 ( si_link l)

Definition at line 379 of file sing_dbm.cc.

380{
381 return dbRead2(l,NULL);
382}
LINKAGE leftv dbRead2(si_link l, leftv key)
Definition sing_dbm.cc:333

◆ 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}
int Typ()
Definition subexpr.cc:1048
void * Data()
Definition subexpr.cc:1192
const Variable & v
< [in] a sqrfree bivariate poly
Definition facBivar.h:39
void WerrorS(const char *s)
Definition feFopen.cc:24
EXTERN_VAR omBin sleftv_bin
Definition ipid.h:145
datum dbm_fetch(DBM *db, datum key)
Definition ndbm.cc:119
datum dbm_nextkey(DBM *db)
Definition ndbm.cc:260
datum dbm_firstkey(DBM *db)
Definition ndbm.cc:252
char * dptr
Definition ndbm.h:84
int dsize
Definition ndbm.h:85
Definition ndbm.h:54
Definition ndbm.h:83
#define omAlloc0Bin(bin)
STATIC_VAR datum d_value
Definition sing_dbm.cc:332
sleftv * leftv
Definition structs.h:53
@ STRING_CMD
Definition tok.h:187

◆ 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 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}
int BOOLEAN
Definition auxiliary.h:88
CanonicalForm b
Definition cfModGcd.cc:4111
int dbm_store(DBM *db, datum key, datum dat, int replace)
Definition ndbm.cc:167
int dbm_delete(DBM *db, datum key)
Definition ndbm.cc:139
#define dbm_clearerr(db)
Definition ndbm.h:77
#define dbm_error(db)
Definition ndbm.h:75
#define DBM_REPLACE
Definition ndbm.h:92
void Werror(const char *fmt,...)
Definition reporter.cc:189