diff --git a/src/osgPlugins/dds/ReaderWriterDDS.cpp b/src/osgPlugins/dds/ReaderWriterDDS.cpp index 0eded7d8c..cffb0aa26 100644 --- a/src/osgPlugins/dds/ReaderWriterDDS.cpp +++ b/src/osgPlugins/dds/ReaderWriterDDS.cpp @@ -35,6 +35,24 @@ #include #include +// Macro similar to what's in FLT/TRP plugins (except it uses wide char under Windows if OSG_USE_UTF8_FILENAME) +#if defined(_WIN32) + #include + #include + #include + #ifdef OSG_USE_UTF8_FILENAME + #define DELETEFILE(file) DeleteFileW(osgDB::convertUTF8toUTF16((file)).c_str()) + #else + #define DELETEFILE(file) DeleteFileA((file)) + #endif + +#else // Unix + + #include + #define DELETEFILE(file) remove((file)) + +#endif + #if defined(OSG_GLES1_AVAILABLE) || defined(OSG_GLES2_AVAILABLE) #define GL_RED 0x1903 #define GL_LUMINANCE4_ALPHA4 0x8043 @@ -1458,7 +1476,13 @@ public: osgDB::ofstream fout(file.c_str(), std::ios::out | std::ios::binary); if(!fout) return WriteResult::ERROR_IN_WRITING_FILE; - return writeImage(image,fout,options); + WriteResult res( writeImage(image,fout,options) ); + if (!res.success()) { + // Remove file on failure + fout.close(); + DELETEFILE(file.c_str()); + } + return res; } virtual WriteResult writeImage(const osg::Image& image,std::ostream& fout,const Options* options) const