Skip to content

Latest commit

 

History

History

gdbm

Folders and files

NameName
Last commit message
Last commit date

parent directory

..
 
 
 
 
 
 
 
 
 
 
 
 
This is the Free Pascal interface to the GDBM library routines. 
Essentially, this is a translation of the gdbm.h header files, with some
additional routines.

The headers translated without any problems, the only thing that should
be taken into account is that the 
GDBM_SYNC constant (for open flags) has been renamed to GDMB_DOSYNC
because it conflicts with the gdbm_sync function. 

Be careful: the TDatum.dptr data pointer which is allocated by the
gdbm routines should be freed by the C free() call, NOT with the 
pascal FreeMem() call.

A solution for this is to use the 'cmem' unit, which replaces the standard
FPC memory manager with the C memory manager. In that case, freemem()
may be used to free the dptr field of the TDatum record.

On top of the plain C header translations, The GDBM routines have been 
overloaded with routines that accept plain strings as key or data 
parameters. This means the following routines have been added:

function gdbm_open(Const para1:string; para2:longint; para3:longint; para4:longint; para5:TGDBMErrorCallBack ):PGDBM_FILE;
function gdbm_store(para1:PGDBM_FILE; Const para2:string; Const para3:string; para4:longint):Boolean;
function gdbm_fetch(para1:PGDBM_FILE; Const para2:string):string;
function gdbm_delete(para1:PGDBM_FILE; Const para2:string):boolean;
procedure gdbm_firstkey(para1:PGDBM_FILE; var key :string);
function gdbm_nextkey(para1:PGDBM_FILE; Const para2:string):string;
function gdbm_exists(para1:PGDBM_FILE; Const para2:string):boolean;

They are just the C routines, but with the TDatum type (a record) 
replaced by a string. The routines take automatically care of memory
deallocation.

Functions that returned an integer to indicate success or failure have been
replaced by functions that return a boolean.

Careful: 
When using ansistrings, make sure the gdbm unit has been compiled
with the -Sh switch. The unit should work with both kinds of strings.

There are 2 test programs:
testgdbm tests the raw C header translation
testgdbm2 tests the String interface to the GDBM routines.

That's about it. 

Enjoy!

Michael. ([email protected])