From ee28a5a37b84c0f4639b33b1dfe211568b375192 Mon Sep 17 00:00:00 2001 From: castano Date: Mon, 6 Aug 2007 19:48:52 +0000 Subject: [PATCH] Fix memory leaks. --- src/nvcore/Ptr.h | 27 +++++++++++++++++++-------- src/nvimage/ImageIO.cpp | 3 +-- src/nvimage/nvtt/InputOptions.h | 4 ++-- src/nvimage/nvtt/dxtlib.cpp | 4 ++-- 4 files changed, 24 insertions(+), 14 deletions(-) diff --git a/src/nvcore/Ptr.h b/src/nvcore/Ptr.h index 9dd2ee7..a11211f 100644 --- a/src/nvcore/Ptr.h +++ b/src/nvcore/Ptr.h @@ -29,10 +29,11 @@ class AutoPtr NV_FORBID_HEAPALLOC(); public: - /** Ctor. */ - explicit AutoPtr( T * p ) { - m_ptr = p; - } + /// Default ctor. + AutoPtr() : m_ptr(NULL) { } + + /// Ctor. + explicit AutoPtr( T * p ) : m_ptr(p) { } /** Dtor. Deletes owned pointer. */ ~AutoPtr() { @@ -69,13 +70,23 @@ public: } /** Const pointer equal comparation. */ - bool operator == (const T * const p) const { - return (m_ptr == p); + friend bool operator == (const AutoPtr & ap, const T * const p) { + return (ap.ptr() == p); + } + + /** Const pointer nequal comparation. */ + friend bool operator != (const AutoPtr & ap, const T * const p) { + return (ap.ptr() != p); + } + + /** Const pointer equal comparation. */ + friend bool operator == (const T * const p, const AutoPtr & ap) { + return (ap.ptr() == p); } /** Const pointer nequal comparation. */ - bool operator != (const T * const p) const { - return (m_ptr != p); + friend bool operator != (const T * const p, const AutoPtr & ap) { + return (ap.ptr() != p); } private: diff --git a/src/nvimage/ImageIO.cpp b/src/nvimage/ImageIO.cpp index b7e96c7..1a8e625 100644 --- a/src/nvimage/ImageIO.cpp +++ b/src/nvimage/ImageIO.cpp @@ -843,12 +843,11 @@ bool nv::ImageIO::saveFloatTIFF(const char * fileName, FloatImage *fimage) TIFFSetField(image, TIFFTAG_SAMPLEFORMAT, SAMPLEFORMAT_IEEEFP); TIFFSetField(image, TIFFTAG_BITSPERSAMPLE, 32); - uint32 rowsperstrip = TIFFDefaultStripSize(image, -1); + uint32 rowsperstrip = TIFFDefaultStripSize(image, (uint32)-1); TIFFSetField(image, TIFFTAG_ROWSPERSTRIP, rowsperstrip); TIFFSetField(image, TIFFTAG_COMPRESSION, COMPRESSION_PACKBITS); TIFFSetField(image, TIFFTAG_ORIENTATION, ORIENTATION_TOPLEFT); - TIFFSetField(image, TIFFTAG_ROWSPERSTRIP, -1L); TIFFSetField(image, TIFFTAG_PLANARCONFIG, PLANARCONFIG_CONTIG); diff --git a/src/nvimage/nvtt/InputOptions.h b/src/nvimage/nvtt/InputOptions.h index 0fe5fe3..9ceff59 100644 --- a/src/nvimage/nvtt/InputOptions.h +++ b/src/nvimage/nvtt/InputOptions.h @@ -24,6 +24,7 @@ #ifndef NV_TT_INPUTOPTIONS_H #define NV_TT_INPUTOPTIONS_H +#include #include #include #include "nvtt.h" @@ -75,7 +76,6 @@ namespace nvtt struct InputOptions::Private::Image { Image() {} - ~Image() { delete data; } int mipLevel; int face; @@ -84,7 +84,7 @@ namespace nvtt int height; int depth; - nv::Image * data; + nv::AutoPtr data; }; } // nvtt namespace diff --git a/src/nvimage/nvtt/dxtlib.cpp b/src/nvimage/nvtt/dxtlib.cpp index 43dab2e..f683806 100644 --- a/src/nvimage/nvtt/dxtlib.cpp +++ b/src/nvimage/nvtt/dxtlib.cpp @@ -409,11 +409,11 @@ bool nvtt::compress(const InputOptions & inputOptions, const OutputOptions & out // Convert to normal map. if (inputOptions.m.convertToNormalMap) { - floatImage = createNormalMap(mipmap.data, (FloatImage::WrapMode)inputOptions.m.wrapMode, inputOptions.m.heightFactors, inputOptions.m.bumpFrequencyScale); + floatImage = createNormalMap(mipmap.data.ptr(), (FloatImage::WrapMode)inputOptions.m.wrapMode, inputOptions.m.heightFactors, inputOptions.m.bumpFrequencyScale); } else { - lastImage = img = mipmap.data; + lastImage = img = mipmap.data.ptr(); // Delete float image. floatImage = NULL;