static int write_file(Stream_t *Stream, char *buf, mt_off_t iwhere, size_t len)
{
	DeclareThis(File_t);
	mt_off_t pos;
	int ret;
	size_t requestedLen;
	Stream_t *Disk = This->Fs->Next;
	off_t where = truncBytes32(iwhere);
	int err;

	requestedLen = len;
	err = This->map(This, where, &len, MT_WRITE, &pos);
	if( err <= 0)
		return err;
	if(batchmode)
		ret = force_write(Disk, buf, pos, len);
	else
		ret = WRITES(Disk, buf, pos, len);
	if(ret > requestedLen)
		ret = requestedLen;
	if (ret > 0 && where + ret > This->FileSize )
		This->FileSize = where + ret;
	recalcPreallocSize(This);
	return ret;
}
Exemple #2
0
static int write_file(struct Stream_t *Stream, char *buf, off_t iwhere, size_t len)
{
	DeclareThis(struct File_t);

	off_t pos;

	struct Stream_t *Disk = This->Fs->Next;
	off_t where = truncBytes32(iwhere);

	const size_t requestedLen = len;

	int err = This->map(This, where, &len, MT_WRITE, &pos);

	if (err <= 0)
		return err;

	int ret = WRITES(Disk, buf, pos, len);

	if(ret > (signed int) requestedLen)
		ret = requestedLen;

	if (ret > 0 && where + ret > (off_t) This->FileSize)
		This->FileSize = where + ret;

	recalcPreallocSize(This);

	return ret;
}