bool om_reg_db_save_newuser(OM_REG_DATA om_reg_data){ OM_SDB *node; int user_index_num; //create environment if(om_reg_data.user_db->ret = db_env_create(&(om_reg_data.user_db->envp), 0)){ om_db_checkerr(om_reg_data.user_db, "Create env for submitting new user."); return false; } //open environment if(om_reg_data.user_db->ret = om_db_openenv(om_reg_data.user_db)){ om_db_checkerr(om_reg_data.user_db, "Opening env for submitting new user."); return false; } //propogate open environment to all the database structs: om_reg_data.user_index->envp = om_reg_data.user_db->envp; for(node = om_reg_data.user_db->om_sdb; node != NULL; node = node->node){ node->om_db->envp = om_reg_data.user_db->envp; } //create user_index db if(om_reg_data.user_index->ret = db_create(&(om_reg_data.user_index->dbp), om_reg_data.user_index->envp, 0)){ om_db_checkerr(om_reg_data.user_index, "Create user_index db to submit a new user."); return false; } //open user_index db if(om_reg_data.user_index->ret = om_db_opendb(om_reg_data.user_index)){ om_db_checkerr(om_reg_data.user_index, "Opening user_index db to submit a new user."); return false; } //OM_USER_INDEX_KEY //begin transaction if(om_reg_data.user_index->ret = om_reg_data.user_index->envp->txn_begin( om_reg_data.user_index->envp, NULL, om_reg_data.user_index->txn, 0)){ om_db_checkerr(om_reg_data.user_index, "Begin user_index txn to submit a new user."); return false; } //get current and determine next index number if(om_reg_data.user_index->ret = om_reg_data.user_index->dbp->get( om_reg_data.user->dbp, NULL, &key, &data, 0)){ om_db_checkerr(om_reg_data.user_index, "Get user_index txn to submit a new user."); return false; } om_reg_data.user_index->dbp->get //store new index number //close user_index db //update user db struct //primary and secondary db, start transaction //put data //commit transcation, close secondary db and primary db, and environment return true;}