// Common, group Files
// Copyright Alexander Liss

#include "filestd.h"


int FileStd::read(int& actual,unsigned char * data, int limit)
{
	actual=0;
	actual=fread(data,1,limit,p);
	if(actual!=limit)
		return ferror(p);
	return 0;
}

int FileStd::read(CommBuffer& buf, int limit)
{
	int g=0;
	if(buf.space_left()<limit+1)
		g=buf.reallocate(buf.write_offset+buf.data_size+limit+1);
	if(g) return 1;

	int actual;
	g=read(actual,buf.write_start()+buf.data_size,limit);
	if(g) return 2;

	buf.data_size+=actual;
	buf.data[buf.write_offset+buf.data_size]=0;

	return 0;
}

int FileStd::read(CommBuffer& buf)
{
	if(buf.space_left()-1<=0)
		return 1;

	int g=read(buf,buf.space_left()-1);

	if(g) return 2;

	return 0;
}

int FileStd::write(int& actual,const unsigned char * data, int size)
{
	actual=0;
	actual=fwrite(data,1,size,p);
	if(actual!=size)
		return ferror(p);
	return 0;
}