]> git.saurik.com Git - wxWidgets.git/blobdiff - src/common/debugrpt.cpp
silently ignore NULL pointers in MSWOnMeasureItem(): apparently this can happen with...
[wxWidgets.git] / src / common / debugrpt.cpp
index a83efdc71dcc6809925b278d1b22672f7babe57a..194b33788b02206f07f3a1d5bfde9ef7fe957cff 100644 (file)
@@ -51,6 +51,7 @@
 #if wxUSE_ZIPSTREAM
     #include "wx/wfstream.h"
     #include "wx/zipstrm.h"
+    #include "wx/ptr_scpd.h"
 #endif // wxUSE_ZIPSTREAM
 
 WX_CHECK_BUILD_OPTIONS("wxQA")
@@ -257,6 +258,21 @@ void wxDebugReport::AddFile(const wxString& name, const wxString& description)
     m_descriptions.Add(description);
 }
 
+bool
+wxDebugReport::AddText(const wxString& name,
+                       const wxString& text,
+                       const wxString& description)
+{
+    wxFileName fn(GetDirectory(), name);
+    wxFFile file(fn.GetFullPath(), _T("w"));
+    if ( !file.IsOpened() || !file.Write(text) )
+        return false;
+
+    AddFile(name, description);
+
+    return true;
+}
+
 void wxDebugReport::RemoveFile(const wxString& name)
 {
     const int n = m_files.Index(name);
@@ -329,8 +345,8 @@ bool wxDebugReport::DoAddLoadedModules(wxXmlNode *nodeModules)
         if ( !path.empty() )
             nodeModule->AddProperty(_T("path"), path);
 
-        void *addr;
-        size_t len;
+        void *addr = NULL;
+        size_t len = 0;
         if ( info.GetAddress(&addr, &len) )
         {
             HexProperty(nodeModule, _T("address"), (unsigned long)addr);
@@ -402,8 +418,8 @@ bool wxDebugReport::AddContext(wxDebugReport::Context ctx)
     wxXmlNode *nodeRoot = new wxXmlNode(wxXML_ELEMENT_NODE, _T("report"));
     xmldoc.SetRoot(nodeRoot);
     nodeRoot->AddProperty(_T("version"), _T("1.0"));
-    nodeRoot->AddProperty(_T("kind"), ctx == Context_Curent ? _T("user")
-                                                            : _T("exception"));
+    nodeRoot->AddProperty(_T("kind"), ctx == Context_Current ? _T("user")
+                                                             : _T("exception"));
 
     // add system information
     wxXmlNode *nodeSystemInfo = new wxXmlNode(wxXML_ELEMENT_NODE, _T("system"));
@@ -438,7 +454,7 @@ bool wxDebugReport::AddContext(wxDebugReport::Context ctx)
     {
         sw.WalkFromException();
     }
-    else // Context_Curent
+    else // Context_Current
     {
         sw.Walk();
     }
@@ -548,6 +564,10 @@ bool wxDebugReport::DoProcess()
 
 #if wxUSE_ZIPSTREAM
 
+// leave the default name wxZipOutputStreamPtr free for users
+wxDECLARE_SCOPED_PTR(wxZipOutputStream, wxDbgZipOutputStreamPtr)
+wxDEFINE_SCOPED_PTR(wxZipOutputStream, wxDbgZipOutputStreamPtr)
+
 // ----------------------------------------------------------------------------
 // wxDebugReportCompress
 // ----------------------------------------------------------------------------
@@ -561,7 +581,11 @@ bool wxDebugReportCompress::DoProcess()
     // create the streams
     wxFileName fn(GetDirectory(), GetReportName(), _T("zip"));
     wxFFileOutputStream os(fn.GetFullPath(), _T("wb"));
-    wxZipOutputStream zos(os, 9);
+
+    // create this one on the heap as a workaround since otherwise the mingw
+    // 3.2.3 linker cannot find ~wxZipOutputStream() when building a dll
+    // version of the library.
+    wxDbgZipOutputStreamPtr zos(new wxZipOutputStream(os, 9));
 
     // add all files to the ZIP one
     wxString name, desc;
@@ -572,16 +596,16 @@ bool wxDebugReportCompress::DoProcess()
         wxZipEntry *ze = new wxZipEntry(name);
         ze->SetComment(desc);
 
-        if ( !zos.PutNextEntry(ze) )
+        if ( !zos->PutNextEntry(ze) )
             return false;
 
         wxFileName filename(fn.GetPath(), name);
         wxFFileInputStream is(filename.GetFullPath());
-        if ( !is.IsOk() || !zos.Write(is).IsOk() )
+        if ( !is.IsOk() || !zos->Write(is).IsOk() )
             return false;
     }
 
-    if ( !zos.Close() )
+    if ( !zos->Close() )
         return false;
 
     m_zipfile = fn.GetFullPath();