]> git.saurik.com Git - wxWidgets.git/blobdiff - src/common/debugrpt.cpp
Change the name of the smart pointer so that wxZipOutputStreamPtr is free
[wxWidgets.git] / src / common / debugrpt.cpp
index ef86029ab8a29eb41f472db3d9d693caf8820db3..eaa1ea0d04a8a78f507e290c7f4eb86e637438e0 100644 (file)
@@ -27,6 +27,7 @@
     #include "wx/app.h"
     #include "wx/log.h"
     #include "wx/intl.h"
+    #include "wx/utils.h"
 #endif // WX_PRECOMP
 
 #if wxUSE_DEBUGREPORT
 #if wxUSE_ZIPSTREAM
     #include "wx/wfstream.h"
     #include "wx/zipstrm.h"
+    #include "wx/ptr_scpd.h"
 #endif // wxUSE_ZIPSTREAM
 
-#if wxUSE_STACKWALKER
+WX_CHECK_BUILD_OPTIONS("wxQA")
 
 // ----------------------------------------------------------------------------
 // XmlStackWalker: stack walker specialization which dumps stack in XML
 // ----------------------------------------------------------------------------
 
+#if wxUSE_STACKWALKER
+
 class XmlStackWalker : public wxStackWalker
 {
 public:
@@ -178,7 +182,7 @@ void XmlStackWalker::OnStackFrame(const wxStackFrame& frame)
 wxDebugReport::wxDebugReport()
 {
     // get a temporary directory name
-    wxString appname(wxTheApp ? wxTheApp->GetAppName() : _T("wx"));
+    wxString appname = GetReportName();
 
     // we can't use CreateTempFileName() because it creates a file, not a
     // directory, so do our best to create a unique name ourselves
@@ -223,7 +227,12 @@ wxDebugReport::~wxDebugReport()
 
     if ( !m_dir.empty() )
     {
-        if ( wxRmDir(m_dir) != 0 )
+        // Temp fix: what should this be? eVC++ doesn't like wxRmDir
+#ifdef __WXWINCE__
+        if ( wxRmdir(m_dir.fn_str()) != 0 )
+#else
+        if ( wxRmDir(m_dir.fn_str()) != 0 )
+#endif
         {
             wxLogSysError(_("Failed to clean up debug report directory \"%s\""),
                           m_dir.c_str());
@@ -237,7 +246,10 @@ wxDebugReport::~wxDebugReport()
 
 wxString wxDebugReport::GetReportName() const
 {
-    return wxString(wxTheApp ? wxTheApp->GetAppName() : _T("wx"));
+    if(wxTheApp)
+        return wxTheApp->GetAppName();
+
+    return _T("wx");
 }
 
 void wxDebugReport::AddFile(const wxString& name, const wxString& description)
@@ -279,6 +291,10 @@ void wxDebugReport::AddAll(Context context)
 #if wxUSE_CRASHREPORT
     AddDump(context);
 #endif // wxUSE_CRASHREPORT
+
+#if !wxUSE_STACKWALKER && !wxUSE_CRASHREPORT
+    wxUnusedVar(context);
+#endif
 }
 
 // ----------------------------------------------------------------------------
@@ -314,8 +330,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);
@@ -387,8 +403,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"));
@@ -423,7 +439,7 @@ bool wxDebugReport::AddContext(wxDebugReport::Context ctx)
     {
         sw.WalkFromException();
     }
-    else // Context_Curent
+    else // Context_Current
     {
         sw.Walk();
     }
@@ -533,6 +549,9 @@ bool wxDebugReport::DoProcess()
 
 #if wxUSE_ZIPSTREAM
 
+wxDECLARE_SCOPED_PTR(wxZipOutputStream, wxDbgZipOutputStreamPtr)
+wxDEFINE_SCOPED_PTR(wxZipOutputStream, wxDbgZipOutputStreamPtr)
+
 // ----------------------------------------------------------------------------
 // wxDebugReportCompress
 // ----------------------------------------------------------------------------
@@ -546,7 +565,7 @@ bool wxDebugReportCompress::DoProcess()
     // create the streams
     wxFileName fn(GetDirectory(), GetReportName(), _T("zip"));
     wxFFileOutputStream os(fn.GetFullPath(), _T("wb"));
-    wxZipOutputStream zos(os, 9);
+    wxDbgZipOutputStreamPtr zos(new wxZipOutputStream(os, 9));
 
     // add all files to the ZIP one
     wxString name, desc;
@@ -557,15 +576,16 @@ bool wxDebugReportCompress::DoProcess()
         wxZipEntry *ze = new wxZipEntry(name);
         ze->SetComment(desc);
 
-        if ( !zos.PutNextEntry(ze) )
+        if ( !zos->PutNextEntry(ze) )
             return false;
 
-        wxFFileInputStream is(wxFileName(fn.GetPath(), name).GetFullPath());
-        if ( !is.IsOk() || !zos.Write(is).IsOk() )
+        wxFileName filename(fn.GetPath(), name);
+        wxFFileInputStream is(filename.GetFullPath());
+        if ( !is.IsOk() || !zos->Write(is).IsOk() )
             return false;
     }
 
-    if ( !zos.Close() )
+    if ( !zos->Close() )
         return false;
 
     m_zipfile = fn.GetFullPath();