void gv_init_reg (gd_region *reg) { gv_namehead *g; sgmnt_addrs *csa; #ifdef NOLICENSE licensed= TRUE ; #else CRYPT_CHKSYSTEM ; #endif switch (reg->dyn.addr->acc_meth) { case dba_usr: gvusr_init (reg, &gv_cur_region, &gv_currkey, &gv_altkey); break; /* we may be left in dba_cm state for gt_cm, if we have rundown the db and again accessed the db without quitting out of gtm */ case dba_cm: case dba_mm: case dba_bg: if (!reg->open) gvcst_init(reg); break; default: GTMASSERT; } assert(reg->open); GVKEYSIZE_INCREASE_IF_NEEDED(DBKEYSIZE(reg->max_key_size)); if (reg->dyn.addr->acc_meth == dba_bg || reg->dyn.addr->acc_meth == dba_mm) { if (!reg->was_open) { csa = (sgmnt_addrs*)&FILE_INFO(reg)->s_addrs; g = csa->dir_tree; if (NULL != g) { /* It is possible that dir_tree has already been targ_alloc'ed. This is because GT.CM or VMS DAL * calls can run down regions without the process halting out. We don't want to double malloc. */ g->clue.end = 0; } SET_CSA_DIR_TREE(csa, reg->max_key_size, reg); } } return; }
void gv_init_reg (gd_region *reg) { gv_key *temp_key; gv_namehead *g; sgmnt_addrs *csa; int keysize; #ifdef NOLICENSE licensed= TRUE ; #else CRYPT_CHKSYSTEM ; #endif switch (reg->dyn.addr->acc_meth) { case dba_usr: gvusr_init (reg, &gv_cur_region, &gv_currkey, &gv_altkey); break; /* we may be left in dba_cm state for gt_cm, if we have rundown the db and again accessed the db without quitting out of gtm */ case dba_cm: case dba_mm: case dba_bg: if( FALSE == reg->open) gvcst_init (reg); break; default: GTMASSERT; } assert(reg->open); keysize = (reg->max_key_size + MAX_NUM_SUBSC_LEN + 4) & (-4); if (keysize > gv_keysize) { gv_keysize = keysize; temp_key = (gv_key*)malloc(sizeof(gv_key) - 1 + gv_keysize); if (gv_currkey) { memcpy(temp_key, gv_currkey, sizeof(gv_key) + gv_currkey->end); free(gv_currkey); } else temp_key->base[0] = '\0'; gv_currkey = temp_key; gv_currkey->top = gv_keysize; temp_key = (gv_key*)malloc(sizeof(gv_key) - 1 + gv_keysize); if (gv_altkey) { memcpy(temp_key, gv_altkey, sizeof(gv_key) + gv_altkey->end); free(gv_altkey); } else temp_key->base[0] = '\0'; gv_altkey = temp_key; gv_altkey->top = gv_keysize; } if (reg->dyn.addr->acc_meth == dba_bg || reg->dyn.addr->acc_meth == dba_mm) { if (!reg->was_open) { csa = (sgmnt_addrs*)&FILE_INFO(reg)->s_addrs; g = csa->dir_tree; if (NULL != g) { /* It is possible that dir_tree has already been targ_alloc'ed. This is because GT.CM or VMS DAL * calls can run down regions without the process halting out. We don't want to double malloc. */ g->clue.end = 0; } SET_CSA_DIR_TREE(csa, reg->max_key_size, reg); } } return; }