Win32: Only use large buffers when writing to disk
authorErik de Castro Lopo <erikd@mega-nerd.com>
Fri, 11 Dec 2015 21:23:22 +0000 (08:23 +1100)
committerErik de Castro Lopo <erikd@mega-nerd.com>
Fri, 11 Dec 2015 21:30:29 +0000 (08:30 +1100)
Windows can suffer quite badly from disk fragmentations. To avoid
this, on Windows, the FILE* buffer size was set to 10Meg. However,
this huge buffer is undesireable when writing to a eg a pipe.

This patch updates the behaviour to only use the huge buffer when
writing to disk.

Patch-from: lvqcl <lvqcl.mail@gmail.com>
Closes: https://sourceforge.net/p/flac/feature-requests/114/

src/libFLAC/stream_encoder.c

index 203a271..cd18a8b 100644 (file)
@@ -1330,7 +1330,8 @@ static FLAC__StreamEncoderInitStatus init_FILE_internal_(
         * Windows can suffer quite badly from disk fragmentation. This can be
         * reduced significantly by setting the output buffer size to be 10MB.
         */
         * Windows can suffer quite badly from disk fragmentation. This can be
         * reduced significantly by setting the output buffer size to be 10MB.
         */
-       setvbuf(file, NULL, _IOFBF, 10*1024*1024);
+       if(GetFileType((HANDLE)_get_osfhandle(_fileno(file))) == FILE_TYPE_DISK)
+               setvbuf(file, NULL, _IOFBF, 10*1024*1024);
 #endif
        encoder->private_->file = file;
 
 #endif
        encoder->private_->file = file;