Mercurial > hg > svcore
diff data/fileio/MP3FileReader.cpp @ 1364:b812df0351d9 3.0-integration
Fix (I think) crash on exit on Windows having loaded an mp3
author | Chris Cannam |
---|---|
date | Thu, 12 Jan 2017 17:29:59 +0000 |
parents | 97deefd38060 |
children | cc62d7862203 |
line wrap: on
line diff
--- a/data/fileio/MP3FileReader.cpp Tue Jan 10 16:56:48 2017 +0000 +++ b/data/fileio/MP3FileReader.cpp Thu Jan 12 17:29:59 2017 +0000 @@ -32,6 +32,14 @@ #include <id3tag.h> #endif +#ifdef _WIN32 +#include <io.h> +#include <fcntl.h> +#else +#include <fcntl.h> +#include <unistd.h> +#endif + #include <QFileInfo> #include <QTextCodec> @@ -176,7 +184,13 @@ #ifdef HAVE_ID3TAG - id3_file *file = id3_file_fdopen(fd, ID3_FILE_MODE_READONLY); +#ifdef _WIN32 + int id3fd = _dup(fd); +#else + int id3fd = dup(fd); +#endif + + id3_file *file = id3_file_fdopen(id3fd, ID3_FILE_MODE_READONLY); if (!file) return; // We can do this a lot more elegantly, but we'll leave that for @@ -185,7 +199,7 @@ id3_tag *tag = id3_file_tag(file); if (!tag) { SVDEBUG << "MP3FileReader::loadTags: No ID3 tag found" << endl; - id3_file_close(file); + id3_file_close(file); // also closes our dup'd fd return; } @@ -206,8 +220,7 @@ } } - // We don't id3_file_close(file) because that closes the fd, which - // was only lent to us + id3_file_close(file); // also closes our dup'd fd #else SVDEBUG << "MP3FileReader::loadTags: ID3 tag support not compiled in" << endl;