More streamlining.

This commit is contained in:
Howard Chu 2002-11-28 15:47:06 +00:00
parent 5f4db0b47f
commit ce581462bd

View file

@ -40,7 +40,8 @@ typedef struct gluenode {
} gluenode; } gluenode;
typedef struct glueinfo { typedef struct glueinfo {
BackendDB *be; BackendInfo bi;
BackendDB bd;
int nodes; int nodes;
gluenode n[1]; gluenode n[1];
} glueinfo; } glueinfo;
@ -55,7 +56,7 @@ glue_back_select (
const char *dn const char *dn
) )
{ {
glueinfo *gi = *(glueinfo **) (be->bd_info+1); glueinfo *gi = (glueinfo *) be->bd_info;
struct berval bv; struct berval bv;
int i; int i;
@ -114,7 +115,7 @@ glue_back_db_open (
BackendDB *be BackendDB *be
) )
{ {
glueinfo *gi = *(glueinfo **) (be->bd_info+1); glueinfo *gi = (glueinfo *) be->bd_info;
static int glueOpened = 0; static int glueOpened = 0;
int rc = 0; int rc = 0;
@ -122,10 +123,10 @@ glue_back_db_open (
glueOpened = 1; glueOpened = 1;
gi->be->be_acl = be->be_acl; gi->bd.be_acl = be->be_acl;
if (gi->be->bd_info->bi_db_open) if (gi->bd.bd_info->bi_db_open)
rc = gi->be->bd_info->bi_db_open(gi->be); rc = gi->bd.bd_info->bi_db_open(&gi->bd);
return rc; return rc;
} }
@ -135,7 +136,7 @@ glue_back_db_close (
BackendDB *be BackendDB *be
) )
{ {
glueinfo *gi = *(glueinfo **) (be->bd_info+1); glueinfo *gi = (glueinfo *) be->bd_info;
static int glueClosed = 0; static int glueClosed = 0;
if (glueClosed) return 0; if (glueClosed) return 0;
@ -143,8 +144,8 @@ glue_back_db_close (
glueClosed = 1; glueClosed = 1;
/* Close the master */ /* Close the master */
if (gi->be->bd_info->bi_db_close) if (gi->bd.bd_info->bi_db_close)
gi->be->bd_info->bi_db_close( gi->be ); gi->bd.bd_info->bi_db_close( &gi->bd );
return 0; return 0;
} }
@ -154,11 +155,10 @@ glue_back_db_destroy (
BackendDB *be BackendDB *be
) )
{ {
glueinfo *gi = *(glueinfo **) (be->bd_info+1); glueinfo *gi = (glueinfo *) be->bd_info;
if (gi->be->bd_info->bi_db_destroy) if (gi->bd.bd_info->bi_db_destroy)
gi->be->bd_info->bi_db_destroy( gi->be ); gi->bd.bd_info->bi_db_destroy( &gi->bd );
free (gi->be);
free (gi); free (gi);
return 0; return 0;
} }
@ -290,7 +290,7 @@ glue_back_search (
int attrsonly int attrsonly
) )
{ {
glueinfo *gi = *(glueinfo **) (b0->bd_info+1); glueinfo *gi = (glueinfo *) b0->bd_info;
BackendDB *be; BackendDB *be;
int i, rc = 0, t2limit = 0, s2limit = 0; int i, rc = 0, t2limit = 0, s2limit = 0;
long stoptime = 0; long stoptime = 0;
@ -431,7 +431,7 @@ glue_tool_entry_first (
BackendDB *b0 BackendDB *b0
) )
{ {
glueinfo *gi = *(glueinfo **) (b0->bd_info+1); glueinfo *gi = (glueinfo *) b0->bd_info;
int i; int i;
/* If we're starting from scratch, start at the most general */ /* If we're starting from scratch, start at the most general */
@ -456,7 +456,7 @@ glue_tool_entry_next (
BackendDB *b0 BackendDB *b0
) )
{ {
glueinfo *gi = *(glueinfo **) (b0->bd_info+1); glueinfo *gi = (glueinfo *) b0->bd_info;
int i; int i;
ID rc; ID rc;
@ -544,7 +544,7 @@ glue_tool_sync (
BackendDB *b0 BackendDB *b0
) )
{ {
glueinfo *gi = *(glueinfo **) (b0->bd_info+1); glueinfo *gi = (glueinfo *) b0->bd_info;
int i; int i;
/* just sync everyone */ /* just sync everyone */
@ -598,18 +598,10 @@ glue_sub_init( )
*/ */
b1->be_flags |= SLAP_BFLAG_GLUE_INSTANCE; b1->be_flags |= SLAP_BFLAG_GLUE_INSTANCE;
gi = (glueinfo *)ch_malloc(sizeof(glueinfo)); gi = (glueinfo *)ch_malloc(sizeof(glueinfo));
/* Space for a copy of the backend, our
* own backendInfo structure, and a pointer
* to our glueinfo
*/
gi->be = (BackendDB *)ch_malloc(
sizeof(BackendDB) + sizeof(BackendInfo) +
sizeof(glueinfo *) );
bi = (BackendInfo *)(gi->be+1);
*gi->be = *b1;
gi->nodes = 0; gi->nodes = 0;
*bi = *b1->bd_info; gi->bd = *b1;
gi->bi = *b1->bd_info;
bi = (BackendInfo *)gi;
bi->bi_open = glue_back_open; bi->bi_open = glue_back_open;
bi->bi_close = glue_back_close; bi->bi_close = glue_back_close;
bi->bi_db_open = glue_back_db_open; bi->bi_db_open = glue_back_db_open;
@ -642,15 +634,10 @@ glue_sub_init( )
/* One more node for the master */ /* One more node for the master */
gi = (glueinfo *)ch_realloc(gi, gi = (glueinfo *)ch_realloc(gi,
sizeof(glueinfo) + gi->nodes * sizeof(gluenode)); sizeof(glueinfo) + gi->nodes * sizeof(gluenode));
gi->n[gi->nodes].be = gi->be; gi->n[gi->nodes].be = &gi->bd;
dnParent( &b1->be_nsuffix[0], &gi->n[gi->nodes].pdn ); dnParent( &b1->be_nsuffix[0], &gi->n[gi->nodes].pdn );
gi->nodes++; gi->nodes++;
b1->bd_info = bi; b1->bd_info = bi;
/* Save a pointer to our private info. Don't use
* be_private or bi_private, to avoid having to fix
* that up before calling the real backend.
*/
*(glueinfo **)(bi+1) = gi;
} }
} }
/* If there are any unresolved subordinates left, something is wrong */ /* If there are any unresolved subordinates left, something is wrong */