mirror of
https://gitlab.com/freepascal.org/fpc/source.git
synced 2025-12-10 23:37:23 +01:00
Solves issues with systems that e.g. require special options for compilation of programs (e.g. libc programs to find libc startup code) or the actual build has been compiled with options that are incompatible with default ones. Tested changes by building an i386-linux local build and i386-linux->arm-linux cross-builds git-svn-id: trunk@22397 - |
||
|---|---|---|
| .. | ||
| examples | ||
| src | ||
| fpmake.pp | ||
| Makefile | ||
| Makefile.fpc | ||
| Makefile.fpc.fpcmake | ||
| README.txt | ||
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. (Michael.VanCanneyt@Wisa.be)