示例#1
0
static int recalcPreallocSize(File_t *This)
{
	size_t currentClusters, neededClusters;
	int clus_size;
	int neededPrealloc;
	Fs_t *Fs = This->Fs;
	int r;

	if(This->FileSize & 0xc0000000) {
		fprintf(stderr, "Bad filesize\n");
	}
	if(This->preallocatedSize & 0xc0000000) {
		fprintf(stderr, "Bad preallocated size %x\n", 
				(int) This->preallocatedSize);
	}

	clus_size = Fs->cluster_size * Fs->sector_size;

	currentClusters = (This->FileSize + clus_size - 1) / clus_size;
	neededClusters = (This->preallocatedSize + clus_size - 1) / clus_size;
	neededPrealloc = neededClusters - currentClusters;
	if(neededPrealloc < 0)
		neededPrealloc = 0;
	r = fsPreallocateClusters(Fs, neededPrealloc - This->preallocatedClusters);
	if(r)
		return r;
	This->preallocatedClusters = neededPrealloc;
	return 0;
}
示例#2
0
static int free_file(Stream_t *Stream)
{
	DeclareThis(File_t);
	Fs_t *Fs = This->Fs;
	fsPreallocateClusters(Fs, -This->preallocatedClusters);       
	FREE(&This->direntry.Dir);
	freeDirCache(Stream);
	return hash_remove(filehash, (void *) Stream, This->hint);
}
示例#3
0
static int recalcPreallocSize(struct File_t *This)
{
	struct Fs_t *Fs = This->Fs;
	int clus_size = Fs->cluster_size * Fs->sector_size;
	size_t currentClusters = (This->FileSize + clus_size - 1) / clus_size;
	size_t neededClusters = (This->preallocatedSize + clus_size - 1) / clus_size;
	int neededPrealloc = neededClusters - currentClusters;

	if (neededPrealloc < 0)
		neededPrealloc = 0;

	int r = fsPreallocateClusters(Fs, neededPrealloc - This->preallocatedClusters);
	if(r)
		return r;

	This->preallocatedClusters = neededPrealloc;

	return 0;
}