- assert(mf->cur_file == mf->no_files - 1);
- /* create new file */
- if (mf->files[mf->cur_file].dir->avail_bytes <
- mf->blocksize)
- {
- log(LOG_DEBUG, "Creating new file.");
+ logf (LOG_DEBUG, "File grows");
+ /* file overflow - allocate new file */
+ if ((ps - mf->files[mf->cur_file].blocks + 1) * mf->blocksize >
+ mf->files[mf->cur_file].dir->avail_bytes)
+ {
+ /* cap off file? */
+ if ((nblocks = mf->files[mf->cur_file].dir->avail_bytes /
+ mf->blocksize) > 0)
+ {
+ logf (LOG_DEBUG, "Capping off file %s at pos %d",
+ mf->files[mf->cur_file].path, nblocks);
+ if ((ps = file_position(mf,
+ (mf->cur_file ? mf->files[mf->cur_file-1].top : 0) +
+ mf->files[mf->cur_file].blocks + nblocks, 0)) < 0)
+ exit(1);
+ if (write(mf->files[mf->cur_file].fd, &dummych, 1) < 1)
+ {
+ logf (LOG_ERRNO|LOG_FATAL, "write dummy");
+ exit(1);
+ }
+ mf->files[mf->cur_file].blocks += nblocks;
+ mf->files[mf->cur_file].bytes += nblocks * mf->blocksize;
+ mf->files[mf->cur_file].dir->avail_bytes -= nblocks *
+ mf->blocksize;
+ }
+ /* get other bit */
+ logf (LOG_DEBUG, "Creating new file.");