/****************************************************************
 *								*
 * Copyright (c) 2001-2016 Fidelity National Information	*
 * Services, Inc. and/or its subsidiaries. All rights reserved.	*
 *								*
 *	This source code contains the intellectual property	*
 *	of its copyright holder(s), and is made available	*
 *	under a license.  If you do not know the terms of	*
 *	the license, please stop and do not read further.	*
 *								*
 ****************************************************************/

/* This is the routine used by both db_init() and mu_rndwn_file() for initializing appropriate structures. */

#include "mdef.h"

#include "gtm_string.h"

#include "gdsroot.h"
#include "gtm_facility.h"
#include "fileinfo.h"
#include "gdsbt.h"
#include "gdsfhead.h"
#include "filestruct.h"
#include "iosp.h"
#include "jnl.h"
#include "wcs_clean_dbsync.h" /* for setting wcs_clean_dbsync pointer */

GBLREF	jnl_process_vector	*prc_vec;
GBLREF	void			(*wcs_stale_fptr)();
GBLREF	void			(*wcs_clean_dbsync_fptr)();

void	db_common_init(gd_region *reg, sgmnt_addrs *csa, sgmnt_data_ptr_t csd)
{
	csa->bmm = MM_ADDR(csd);
	csa->reorg_last_dest = 0;	/* For mupip reorg swap operation */
	csa->region = reg;		/* initialize the back-link */
	reg->max_rec_size = csd->max_rec_size;
	reg->max_key_size = csd->max_key_size;
 	reg->null_subs = csd->null_subs;
 	reg->std_null_coll = csd->std_null_coll;
	reg->jnl_state = csd->jnl_state;
	reg->jnl_file_len = csd->jnl_file_len;		/* journal file name length */
	memcpy(reg->jnl_file_name, csd->jnl_file_name, reg->jnl_file_len);	/* journal file name */
	reg->jnl_alq = csd->jnl_alq;
	reg->jnl_deq = csd->jnl_deq;
	reg->jnl_buffer_size = csd->jnl_buffer_size;
	reg->jnl_before_image = csd->jnl_before_image;
	assert(!IS_AIO_DBGLDMISMATCH(reg->dyn.addr, csd));	/* Or else "gvcst_init" should have reopened the file */
	bt_init(csa);
	/* Initialization of prc_vec is done even for no journaling. gtcm uses this always. Others might need it too. */
	if (NULL == prc_vec)
	{
		prc_vec = (jnl_process_vector *)malloc(SIZEOF(jnl_process_vector));
		jnl_prc_vector(prc_vec);
	}
	wcs_stale_fptr = &wcs_stale;
	wcs_clean_dbsync_fptr = &wcs_clean_dbsync;
}
