#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <io.h>		/* filelength() */
#include "acash.h"
#include "abuff.h"

FILE *cash2_fopen(CFILE *fp,char *fname,char *type)
/* ミニ キャッシュ２：fopen */
{
int size;
	/* ファイルオープン */
	fp->cflag=0; /* 取りあえずキャッシュＯＦＦ */
	fp->cfp=fopen(fname,type);
	if (fp->cfp!=NULL) {
		/* キャッシュバッファー確保 */
		/* テキストモードの時には最大で２倍の無駄が出る */
		size=filelength(fileno(fp->cfp));
		fp->cbuff=newmalloc(size);
		if (fp->cbuff!=NULL) { /* キャッシュバッファー確保 Ok */
			/* ファイル読み込み */
			fp->csize=fread(fp->cbuff,1,size,fp->cfp); /* 実読み込みサイズを返す */
			if (ferror(fp->cfp)) { /* 読み込みエラー発生時 */
				/* キャッシュバッファー開放 */
				free(fp->cbuff);
			} else {
				fp->cseek=0; /* シークポイント先頭へ */
				fp->cflag=1; /* キャッシュＯＮ */
				/* ファイルそのものはオープンしたままでおく */
				/* ただしファイルポインターは念のため先頭に戻しておく */
				rewind(fp->cfp);
			}
		}
	}
	/*printf2("Cache : O%s\n",fp->cflag? "n":"ff");*/
	return(fp->cfp);
}
