ITS#450: teach LDBM/GDBM about cursors

This commit is contained in:
Kurt Zeilenga 2000-02-11 02:05:14 +00:00
parent 0ba3d75913
commit 6968ede534
2 changed files with 16 additions and 3 deletions

View file

@ -66,7 +66,7 @@ typedef DBC LDBMCursor;
# endif
#else
typedef int LDBMCursor;
typedef void LDBMCursor;
# define LDBM_READER O_RDONLY
# define LDBM_WRITER O_RDWR
# define LDBM_WRCREAT (O_RDWR|O_CREAT)
@ -107,7 +107,7 @@ LDAP_END_DECL
LDAP_BEGIN_DECL
typedef datum Datum;
typedef int LDBMCursor;
typedef Datum LDBMCursor;
typedef GDBM_FILE LDBM;
extern gdbm_error gdbm_errno;

View file

@ -529,6 +529,11 @@ ldbm_firstkey( LDBM ldbm, LDBMCursor **dbcp )
d = gdbm_firstkey( ldbm );
LDBM_UNLOCK;
if ( d.dptr != NULL ) {
*dbcp = (Datum *) malloc( sizeof( Datum ) );
**dbcp = ldbm_datum_dup( ldbm, d );
}
return d;
}
@ -538,9 +543,17 @@ ldbm_nextkey( LDBM ldbm, Datum key, LDBMCursor *dbcp )
Datum d;
LDBM_LOCK;
d = gdbm_nextkey( ldbm, key );
d = gdbm_nextkey( ldbm, *dbcp );
LDBM_UNLOCK;
ldbm_datum_free( ldbm, *dbcp );
if ( d.dptr != NULL ) {
*dbcp = ldbm_datum_dup( ldbm, d );
} else {
free( dbcp );
}
return d;
}