# HG changeset patch # User reimar # Date 1242482393 0 # Node ID 4d9de809b174ee4aa8f8aa71c1957b8ac9924a19 # Parent 170369ec951c9542c58fbe19d582145ac77b8233 Add a hack to detect when we are writing into a Windows pipe since the fseek incorrectly does not fail like it should. This ensures we will not incorrectly append the file header at the end. Based on patch by Zhou Zongyi [zhouzongyi at pset.suntec.net] diff -r 170369ec951c -r 4d9de809b174 libao2/ao_pcm.c --- a/libao2/ao_pcm.c Fri May 15 23:17:25 2009 +0000 +++ b/libao2/ao_pcm.c Sat May 16 13:59:53 2009 +0000 @@ -34,6 +34,10 @@ #include "mp_msg.h" #include "help_mp.h" +#ifdef __MINGW32__ +// for GetFileType to detect pipes +#include +#endif static const ao_info_t info = { @@ -175,7 +179,13 @@ static void uninit(int immed){ if(ao_pcm_waveheader){ /* Rewrite wave header */ - if (fseek(fp, 0, SEEK_SET) != 0) + int broken_seek = 0; +#ifdef __MINGW32__ + // Windows, in its usual idiocy "emulates" seeks on pipes so it always looks + // like they work. So we have to detect them brute-force. + broken_seek = GetFileType((HANDLE)_get_osfhandle(_fileno(fp))) != FILE_TYPE_DISK; +#endif + if (broken_seek || fseek(fp, 0, SEEK_SET) != 0) mp_msg(MSGT_AO, MSGL_ERR, "Could not seek to start, WAV size headers not updated!\n"); else if (data_length > 0x7ffff000) mp_msg(MSGT_AO, MSGL_ERR, "File larger than allowed for WAV files, may play truncated!\n");