// Author: Vadim Zeitlin
// Modified by:
// Created: 2005-01-17
-// RCS-ID: $Id$
// Copyright: (c) 2005 Vadim Zeitlin <zeitlin@dptmaths.ens-cachan.fr>
-// License: wxWindows licence
+// Licence: wxWindows licence
///////////////////////////////////////////////////////////////////////////////
// ============================================================================
#if wxUSE_DEBUGREPORT && wxUSE_XML
#include "wx/debugrpt.h"
+#if wxUSE_FFILE
+ #include "wx/ffile.h"
+#elif wxUSE_FILE
+ #include "wx/file.h"
+#endif
-#include "wx/ffile.h"
#include "wx/filename.h"
#include "wx/dir.h"
#include "wx/dynlib.h"
// directory, so do our best to create a unique name ourselves
//
// of course, this doesn't protect us against malicious users...
- wxFileName fn;
- fn.AssignTempFileName(appname);
#if wxUSE_DATETIME
m_dir.Printf(wxT("%s%c%s_dbgrpt-%lu-%s"),
- fn.GetPath().c_str(), wxFILE_SEP_PATH, appname.c_str(),
+ wxFileName::GetTempDir(), wxFILE_SEP_PATH, appname,
wxGetProcessId(),
- wxDateTime::Now().Format(wxT("%Y%m%dT%H%M%S")).c_str());
+ wxDateTime::Now().Format(wxT("%Y%m%dT%H%M%S")));
#else
m_dir.Printf(wxT("%s%c%s_dbgrpt-%lu"),
- fn.GetPath().c_str(), wxFILE_SEP_PATH, appname.c_str(),
+ wxFileName::GetTempDir(), wxFILE_SEP_PATH, appname,
wxGetProcessId());
#endif
wxString wxDebugReport::GetReportName() const
{
- if(wxTheApp)
- return wxTheApp->GetAppDisplayName();
+ if ( wxTheApp )
+ return wxTheApp->GetAppName();
return wxT("wx");
}
// 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
{
const wxString& text,
const wxString& description)
{
+#if wxUSE_FFILE || wxUSE_FILE
wxASSERT_MSG( !wxFileName(filename).IsAbsolute(),
wxT("filename should be relative to debug report directory") );
- wxFileName fn(GetDirectory(), filename);
- wxFFile file(fn.GetFullPath(), wxT("w"));
- if ( !file.IsOpened() || !file.Write(text) )
+ const wxString fullPath = wxFileName(GetDirectory(), filename).GetFullPath();
+#if wxUSE_FFILE
+ wxFFile file(fullPath, wxT("w"));
+#elif wxUSE_FILE
+ wxFile file(fullPath, wxFile::write);
+#endif
+ if ( !file.IsOpened() || !file.Write(text, wxConvAuto()) )
return false;
AddFile(filename, description);
return true;
+#else // !wxUSE_FFILE && !wxUSE_FILE
+ return false;
+#endif
}
void wxDebugReport::RemoveFile(const wxString& name)
// 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()
{
+#define HAS_FILE_STREAMS (wxUSE_STREAMS && (wxUSE_FILE || wxUSE_FFILE))
+#if HAS_FILE_STREAMS
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
- wxFileName fn(GetDirectory(), GetReportName(), wxT("zip"));
- wxFFileOutputStream os(fn.GetFullPath(), wxT("wb"));
+ const wxString ofullPath = fn.GetFullPath();
+#if wxUSE_FFILE
+ wxFFileOutputStream os(ofullPath, wxT("wb"));
+#elif wxUSE_FILE
+ wxFileOutputStream os(ofullPath);
+#endif
+ if ( !os.IsOk() )
+ return false;
wxZipOutputStream zos(os, 9);
// add all files to the ZIP one
if ( !zos.PutNextEntry(ze) )
return false;
- wxFileName filename(fn.GetPath(), name);
- wxFFileInputStream is(filename.GetFullPath());
+ const wxString ifullPath = wxFileName(GetDirectory(), name).GetFullPath();
+#if wxUSE_FFILE
+ wxFFileInputStream is(ifullPath);
+#elif wxUSE_FILE
+ wxFileInputStream is(ifullPath);
+#endif
if ( !is.IsOk() || !zos.Write(is).IsOk() )
return false;
}
if ( !zos.Close() )
return false;
- m_zipfile = fn.GetFullPath();
+ m_zipfile = ofullPath;
return true;
+#else
+ return false;
+#endif // HAS_FILE_STREAMS
}
// ----------------------------------------------------------------------------
wxArrayString output, errors;
int rc = wxExecute(wxString::Format
(
- wxT("%s -F %s=@\"%s\" %s"),
+ wxT("%s -F \"%s=@%s\" %s"),
m_curlCmd.c_str(),
m_inputField.c_str(),
GetCompressedFileName().c_str(),