static char sccsid[]="%Z% %M% %I% %E% %U%";
#include "colmn.h"

extern GlobalCt  *pGlobTable;

int cl_set_result(pSchRsl)
SearchResult  *pSchRsl;		/* 検索結果構造体         */
{
	char *psData;	/* データを読み込むバッファ    */
	int  *piIndex;	/* インデックスを読み込むバッファ */
	FILE *fp;		/* 検索結果ファイル           */
	int len,ret,k;
	char *msg;

/*
*** データ読み込み領域のアロケートとクリアー
 */
printf("cl_set_result:iDataLen=%d iIndexLen=%d\n",pSchRsl->iDataLen,pSchRsl->iIndexLen);
	if (!(psData=(char *)Malloc(pSchRsl->iDataLen))) {
		ERROROUT("memory allocate error");
		return ECL_SYSTEM_ERROR;
	}
	memset(psData,0,pSchRsl->iDataLen);

/*
*** インデックス読み込み領域のアロケートとクリアー
 */
	if (!(piIndex=(int *)Malloc(pSchRsl->iIndexLen))) {
		ERROROUT("memory allocate error");
		return ECL_SYSTEM_ERROR;
	}
	memset(piIndex,0,pSchRsl->iIndexLen);

/*
*** ファイルから検索結果データとインテ
 */
	/* ファイルを読み出し専用でオープン */
	if (!(fp=fopen(akb_akb_home_add(pSchRsl->pzFileName),"r"))) {
		ERROROUT1("file (%s) open error.",pSchRsl->pzFileName);
		return ECL_SYSTEM_ERROR;
	}

	/* データの読み込み */
	len = pSchRsl->iDataLen;
	ret = fread(psData,1,len,fp);

	if (k = ferror(fp)) ret = -1;
	else if (ret>0 && ret<len) ret = -1;
	if (ret <= 0) {
		msg = "data";
		goto Err;
	}

	/* 検索結果構造体にデータをセット */
	pSchRsl->RslBody = psData;

	/* インデックスの読み込み */
	len = pSchRsl->iIndexLen;
	ret = fread(piIndex,1,len,fp);

	if (k = ferror(fp)) ret = -1;
	else if (ret>0 && ret<len) ret = -1;
	if (ret <= 0) {
		msg = "index";
		goto Err;
	}

	/* 検索結果構造体にインデックスをセット */
	pSchRsl->iIndex = piIndex;

	/* ファイルをクローズ */
	fclose(fp);

	return NORMAL;
 Err:
	fclose(fp);
 	if (ret < 0) ERROROUT1("cl_set_result: %s fread error.",msg);
	else {
		ret = -1;
		ERROROUT("cl_set_result: end of file.");
	}
/*
	if (!(pGlobTable->exception=errno)) pGlobTable->exception = ret;
*/
	if (errno) k = errno;
	else k = ret;
	pGlobTable->exception = cl_mk_exception_code(SQL_EXCEPTION,k);
	pGlobTable->error = ret;
	pGlobTable->err_no = errno;
	if (k) ERROROUT2("cl_set_result: errno=%d %s",errno,strerror(errno));
 	return ret;
}
