X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/5d978d07a469d178e249b3f0f57ede3a674e2901..faec5a4383bb54f846c1eae142353804eb88d956:/src/common/filename.cpp diff --git a/src/common/filename.cpp b/src/common/filename.cpp index 342bdb88e2..041e24a1f4 100644 --- a/src/common/filename.cpp +++ b/src/common/filename.cpp @@ -48,6 +48,19 @@ #include "wx/msw/winundef.h" #endif +// at least some of these are required for file mod time +#ifdef __WXGTK__ +#include +#include +#include +#include +#ifndef __VMS +# include +#endif +# include +#include +#endif + // ============================================================================ // implementation // ============================================================================ @@ -152,6 +165,29 @@ bool wxFileName::DirExists( const wxString &dir ) return ::wxDirExists( dir ); } +wxDateTime wxFileName::GetModificationTime() +{ +#ifdef __WXGTK__ + struct stat buff; + stat( GetFullName().fn_str(), &buff ); + +#if !defined( __EMX__ ) && !defined(__VMS) + struct stat lbuff; + lstat( GetFullName().fn_str(), &lbuff ); + struct tm *t = localtime( &lbuff.st_mtime ); +#else + struct tm *t = localtime( &buff.st_mtime ); +#endif + + wxDateTime ret( t->tm_mday, (wxDateTime::Month)t->tm_mon, t->tm_year+1900, t->tm_hour, t->tm_min, t->tm_sec ); +#else + + wxDateTime ret = wxDateTime::Now(); + +#endif + return ret; +} + // ---------------------------------------------------------------------------- // CWD and HOME stuff // ---------------------------------------------------------------------------- @@ -204,14 +240,47 @@ void wxFileName::AssignTempFileName( const wxString &prefix ) // directory operations // ---------------------------------------------------------------------------- -bool wxFileName::Mkdir( int perm ) +bool wxFileName::Mkdir( int perm, bool full ) { - return wxFileName::Mkdir( GetFullPath(), perm ); + return wxFileName::Mkdir( GetFullPath(), perm, full ); } -bool wxFileName::Mkdir( const wxString &dir, int perm ) +bool wxFileName::Mkdir( const wxString &dir, int perm, bool full ) { - return ::wxMkdir( dir, perm ); + if (full) + { + wxFileName filename(dir); + wxArrayString dirs = filename.GetDirs(); + dirs.Add(filename.GetName()); + + size_t count = dirs.GetCount(); + size_t i; + wxString currPath; + int noErrors = 0; + for ( i = 0; i < count; i++ ) + { + currPath += dirs[i]; + + if (currPath.Last() == wxT(':')) + { + // Can't create a root directory so continue to next dir + currPath += wxFILE_SEP_PATH; + continue; + } + + if (!DirExists(currPath)) + if (!wxMkdir(currPath, perm)) + noErrors ++; + + if ( (i < (count-1)) ) + currPath += wxFILE_SEP_PATH; + } + + return (noErrors == 0); + + } + else + return ::wxMkdir( dir, perm ); } bool wxFileName::Rmdir() @@ -588,7 +657,10 @@ wxString wxFileName::GetLongPath() const HANDLE hFind; pathOut = wxEmptyString; - size_t count = m_dirs.GetCount(); + wxArrayString dirs = GetDirs(); + dirs.Add(GetName()); + + size_t count = dirs.GetCount(); size_t i; wxString tmpPath; @@ -596,7 +668,7 @@ wxString wxFileName::GetLongPath() const { // We're using pathOut to collect the long-name path, // but using a temporary for appending the last path component which may be short-name - tmpPath = pathOut + m_dirs[i]; + tmpPath = pathOut + dirs[i]; if (tmpPath.Last() == wxT(':')) {