]> git.saurik.com Git - wxWidgets.git/blobdiff - src/common/debugrpt.cpp
fix memory leak in wxScreenDC, fixes #13249
[wxWidgets.git] / src / common / debugrpt.cpp
index 85a8a2f6c82f489b708a59d1c0d98ff5cca0872e..a903051fcf1a4e4c6e5b463fe0f103010fe3a87d 100644 (file)
@@ -6,7 +6,7 @@
 // Created:     2005-01-17
 // RCS-ID:      $Id$
 // Copyright:   (c) 2005 Vadim Zeitlin <zeitlin@dptmaths.ens-cachan.fr>
 // Created:     2005-01-17
 // RCS-ID:      $Id$
 // Copyright:   (c) 2005 Vadim Zeitlin <zeitlin@dptmaths.ens-cachan.fr>
-// License:     wxWindows licence
+// Licence:     wxWindows licence
 ///////////////////////////////////////////////////////////////////////////////
 
 // ============================================================================
 ///////////////////////////////////////////////////////////////////////////////
 
 // ============================================================================
@@ -252,8 +252,8 @@ wxDebugReport::~wxDebugReport()
 
 wxString wxDebugReport::GetReportName() const
 {
 
 wxString wxDebugReport::GetReportName() const
 {
-    if(wxTheApp)
-        return wxTheApp->GetAppDisplayName();
+    if ( wxTheApp )
+        return wxTheApp->GetAppName();
 
     return wxT("wx");
 }
 
     return wxT("wx");
 }
@@ -268,8 +268,10 @@ wxDebugReport::AddFile(const wxString& filename, const wxString& description)
         // we need to copy the file to the debug report directory: give it the
         // same name there
         name = fn.GetFullName();
         // we need to copy the file to the debug report directory: give it the
         // same name there
         name = fn.GetFullName();
-        wxCopyFile(fn.GetFullPath(),
-                   wxFileName(GetDirectory(), name).GetFullPath());
+
+        if (!wxCopyFile(fn.GetFullPath(),
+                        wxFileName(GetDirectory(), name).GetFullPath()))
+           return;
     }
     else // file relative to the report directory
     {
     }
     else // file relative to the report directory
     {
@@ -598,14 +600,38 @@ bool wxDebugReport::DoProcess()
 // wxDebugReportCompress
 // ----------------------------------------------------------------------------
 
 // wxDebugReportCompress
 // ----------------------------------------------------------------------------
 
+void wxDebugReportCompress::SetCompressedFileDirectory(const wxString& dir)
+{
+    wxASSERT_MSG( m_zipfile.empty(), "Too late: call this before Process()" );
+
+    m_zipDir = dir;
+}
+
+void wxDebugReportCompress::SetCompressedFileBaseName(const wxString& name)
+{
+    wxASSERT_MSG( m_zipfile.empty(), "Too late: call this before Process()" );
+
+    m_zipName = name;
+}
+
 bool wxDebugReportCompress::DoProcess()
 {
     const size_t count = GetFilesCount();
     if ( !count )
         return false;
 
 bool wxDebugReportCompress::DoProcess()
 {
     const size_t count = GetFilesCount();
     if ( !count )
         return false;
 
+    // create the compressed report file outside of the directory with the
+    // report files as it will be deleted by wxDebugReport dtor but we want to
+    // keep this one: for this we simply treat the directory name as the name
+    // of the file so that its last component becomes our base name
+    wxFileName fn(GetDirectory());
+    if ( !m_zipDir.empty() )
+        fn.SetPath(m_zipDir);
+    if ( !m_zipName.empty() )
+        fn.SetName(m_zipName);
+    fn.SetExt("zip");
+
     // create the streams
     // create the streams
-    wxFileName fn(GetDirectory(), GetReportName(), wxT("zip"));
     wxFFileOutputStream os(fn.GetFullPath(), wxT("wb"));
     wxZipOutputStream zos(os, 9);
 
     wxFFileOutputStream os(fn.GetFullPath(), wxT("wb"));
     wxZipOutputStream zos(os, 9);
 
@@ -621,7 +647,7 @@ bool wxDebugReportCompress::DoProcess()
         if ( !zos.PutNextEntry(ze) )
             return false;
 
         if ( !zos.PutNextEntry(ze) )
             return false;
 
-        wxFileName filename(fn.GetPath(), name);
+        const wxFileName filename(GetDirectory(), name);
         wxFFileInputStream is(filename.GetFullPath());
         if ( !is.IsOk() || !zos.Write(is).IsOk() )
             return false;
         wxFFileInputStream is(filename.GetFullPath());
         if ( !is.IsOk() || !zos.Write(is).IsOk() )
             return false;