X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/13ff24850636a90279de64cf5784b08aec510231..1832043f93af07af3f4891d9a95c4d4e1f70eec5:/src/common/filefn.cpp diff --git a/src/common/filefn.cpp b/src/common/filefn.cpp index dabc946ebf..dec3887eb3 100644 --- a/src/common/filefn.cpp +++ b/src/common/filefn.cpp @@ -19,14 +19,17 @@ // For compilers that support precompilation, includes "wx.h". #include "wx/wxprec.h" -#include "wx/defs.h" #ifdef __BORLANDC__ #pragma hdrstop #endif -#include "wx/utils.h" -#include "wx/intl.h" +#ifndef WX_PRECOMP + #include "wx/intl.h" + #include "wx/log.h" + #include "wx/utils.h" +#endif + #include "wx/file.h" // This does include filefn.h #include "wx/filename.h" #include "wx/dir.h" @@ -50,8 +53,6 @@ #include "wx/mac/private.h" // includes mac headers #endif -#include "wx/log.h" - #ifdef __WINDOWS__ #include "wx/msw/private.h" #include "wx/msw/mslu.h" @@ -242,8 +243,7 @@ bool wxPathList::Member (const wxString& path) wxString wxPathList::FindValidPath (const wxString& file) { - if (wxFileExists (wxExpandPath(wxFileFunctionsBuffer, file))) - return wxString(wxFileFunctionsBuffer); + wxExpandPath(wxFileFunctionsBuffer, file); wxChar buf[_MAXPATHLEN]; wxStrcpy(buf, wxFileFunctionsBuffer); @@ -252,7 +252,7 @@ wxString wxPathList::FindValidPath (const wxString& file) for (wxStringList::compatibility_iterator node = GetFirst(); node; node = node->GetNext()) { - const wxChar *path = node->GetData(); + const wxString path(node->GetData()); wxStrcpy (wxFileFunctionsBuffer, path); wxChar ch = wxFileFunctionsBuffer[wxStrlen(wxFileFunctionsBuffer)-1]; if (ch != wxT('\\') && ch != wxT('/')) @@ -299,16 +299,19 @@ wxFileExists (const wxString& filename) return (ret != (DWORD)-1) && !(ret & FILE_ATTRIBUTE_DIRECTORY); #else // !__WIN32__ + #ifndef S_ISREG + #define S_ISREG(mode) ((mode) & S_IFREG) + #endif wxStructStat st; #ifndef wxNEED_WX_UNISTD_H - return (wxStat( filename.fn_str() , &st) == 0 && (st.st_mode & S_IFREG)) + return (wxStat( filename.fn_str() , &st) == 0 && S_ISREG(st.st_mode)) #ifdef __OS2__ || (errno == EACCES) // if access is denied something with that name // exists and is opened in exclusive mode. #endif ; #else - return wxStat( filename , &st) == 0 && (st.st_mode & S_IFREG); + return wxStat( filename , &st) == 0 && S_ISREG(st.st_mode); #endif #endif // __WIN32__/!__WIN32__ } @@ -1107,8 +1110,19 @@ wxCopyFile (const wxString& file1, const wxString& file2, bool overwrite) } bool -wxRenameFile (const wxString& file1, const wxString& file2) +wxRenameFile(const wxString& file1, const wxString& file2, bool overwrite) { + if ( !overwrite && wxFileExists(file2) ) + { + wxLogSysError + ( + _("Failed to rename the file '%s' to '%s' because the destination file already exists."), + file1.c_str(), file2.c_str() + ); + + return false; + } + #if !defined(__WXWINCE__) && !defined(__WXPALMOS__) // Normal system call if ( wxRename (file1, file2) == 0 ) @@ -1116,7 +1130,7 @@ wxRenameFile (const wxString& file1, const wxString& file2) #endif // Try to copy - if (wxCopyFile(file1, file2)) { + if (wxCopyFile(file1, file2, overwrite)) { wxRemoveFile(file1); return true; } @@ -1624,44 +1638,11 @@ void WXDLLEXPORT wxSplitPath(const wxChar *pszFileName, time_t WXDLLEXPORT wxFileModificationTime(const wxString& filename) { -#if defined(__WXPALMOS__) - return 0; -#elif defined(__WXWINCE__) - FILETIME ftLastWrite; - AutoHANDLE hFile(::CreateFile(filename, GENERIC_READ, FILE_SHARE_READ, - NULL, 0, FILE_ATTRIBUTE_NORMAL, 0)); - - if ( !hFile.IsOk() ) - return 0; - - if ( !::GetFileTime(hFile, NULL, NULL, &ftLastWrite) ) - return 0; + wxDateTime mtime; + if ( !wxFileName(filename).GetTimes(NULL, &mtime, NULL) ) + return (time_t)-1; - // sure we want to translate to local time here? - FILETIME ftLocal; - if ( !::FileTimeToLocalFileTime(&ftLastWrite, &ftLocal) ) - { - wxLogLastError(_T("FileTimeToLocalFileTime")); - } - - // FILETIME is a counted in 100-ns since 1601-01-01, convert it to - // number of seconds since 1970-01-01 - ULARGE_INTEGER uli; - uli.LowPart = ftLocal.dwLowDateTime; - uli.HighPart = ftLocal.dwHighDateTime; - - ULONGLONG ull = uli.QuadPart; - ull /= wxULL(10000000); // number of 100ns intervals in 1s - ull -= wxULL(11644473600); // 1970-01-01 - 1601-01-01 in seconds - - return wx_static_cast(time_t, ull); -#else - wxStructStat buf; - if ( wxStat( filename, &buf) != 0 ) - return 0; - - return buf.st_mtime; -#endif + return mtime.GetTicks(); } @@ -1803,6 +1784,7 @@ bool wxIsWild( const wxString& pattern ) * Written By Douglas A. Lewis * * The match procedure is public domain code (from ircII's reg.c) +* but modified to suit our tastes (RN: No "%" syntax I guess) */ bool wxMatchWild( const wxString& pat, const wxString& text, bool dot_special ) @@ -1816,11 +1798,8 @@ bool wxMatchWild( const wxString& pat, const wxString& text, bool dot_special ) const wxChar *m = pat.c_str(), *n = text.c_str(), *ma = NULL, - *na = NULL, - *mp = NULL, - *np = NULL; + *na = NULL; int just = 0, - pcount = 0, acount = 0, count = 0; @@ -1838,7 +1817,6 @@ bool wxMatchWild( const wxString& pat, const wxString& text, bool dot_special ) ma = ++m; na = n; just = 1; - mp = NULL; acount = count; } else if (*m == wxT('?')) @@ -1881,8 +1859,6 @@ bool wxMatchWild( const wxString& pat, const wxString& text, bool dot_special ) if (*m == *n) { m++; - if (*n == wxT(' ')) - mp = NULL; count++; n++; } @@ -1899,19 +1875,6 @@ bool wxMatchWild( const wxString& pat, const wxString& text, bool dot_special ) */ if (!*n) return false; - if (mp) - { - m = mp; - if (*np == wxT(' ')) - { - mp = NULL; - goto check_percent; - } - n = ++np; - count = pcount; - } - else - check_percent: if (ma) {