mirror of
https://git.openldap.org/openldap/openldap.git
synced 2026-02-01 11:29:27 -05:00
ITS#450: teach LDBM/GDBM about cursors
This commit is contained in:
parent
0ba3d75913
commit
6968ede534
2 changed files with 16 additions and 3 deletions
|
|
@ -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;
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Reference in a new issue