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; }
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); }
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; }