]> git.saurik.com Git - wxWidgets.git/blobdiff - src/common/filefn.cpp
int warning
[wxWidgets.git] / src / common / filefn.cpp
index ed9b69b1cd6703381dd20499ccb3b198c7983d14..5824391e0f770f77d747f32643406b284113a96c 100644 (file)
 
 // For compilers that support precompilation, includes "wx.h".
 #include "wx/wxprec.h"
 
 // For compilers that support precompilation, includes "wx.h".
 #include "wx/wxprec.h"
-#include "wx/defs.h"
 
 #ifdef __BORLANDC__
     #pragma hdrstop
 #endif
 
 
 #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"
 #include "wx/file.h" // This does include filefn.h
 #include "wx/filename.h"
 #include "wx/dir.h"
@@ -40,7 +43,7 @@
 #include <stdio.h>
 #include <stdlib.h>
 #include <string.h>
 #include <stdio.h>
 #include <stdlib.h>
 #include <string.h>
-#if !defined(__WATCOMC__)
+#if !wxONLY_WATCOM_EARLIER_THAN(1,4)
     #if !(defined(_MSC_VER) && (_MSC_VER > 800))
         #include <errno.h>
     #endif
     #if !(defined(_MSC_VER) && (_MSC_VER > 800))
         #include <errno.h>
     #endif
@@ -50,8 +53,6 @@
     #include  "wx/mac/private.h"  // includes mac headers
 #endif
 
     #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"
 #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)
 {
 
 wxString wxPathList::FindValidPath (const wxString& file)
 {
-  if (wxFileExists (wxExpandPath(wxFileFunctionsBuffer, file)))
-    return wxString(wxFileFunctionsBuffer);
+  wxExpandPath(wxFileFunctionsBuffer, file);
 
   wxChar buf[_MAXPATHLEN];
   wxStrcpy(buf, wxFileFunctionsBuffer);
 
   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())
     {
 
   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('/'))
       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__
 
     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
     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
 #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__
 }
 #endif
 #endif // __WIN32__/!__WIN32__
 }
@@ -878,13 +881,19 @@ wxString wxMacFSRefToPath( const FSRef *fsRef , CFStringRef additionalPathCompon
     }
     CFStringRef cfString = CFURLCopyFileSystemPath(fullURLRef, kDefaultPathStyle);
     CFRelease( fullURLRef ) ;
     }
     CFStringRef cfString = CFURLCopyFileSystemPath(fullURLRef, kDefaultPathStyle);
     CFRelease( fullURLRef ) ;
-    return wxMacCFStringHolder(cfString).AsString(wxLocale::GetSystemEncoding());
+    CFMutableStringRef cfMutableString = CFStringCreateMutableCopy(NULL, 0, cfString);
+    CFRelease( cfString );
+    CFStringNormalize(cfMutableString,kCFStringNormalizationFormC);    
+    return wxMacCFStringHolder(cfMutableString).AsString(wxLocale::GetSystemEncoding());
 }
 
 OSStatus wxMacPathToFSRef( const wxString&path , FSRef *fsRef )
 {
     OSStatus err = noErr ;
 }
 
 OSStatus wxMacPathToFSRef( const wxString&path , FSRef *fsRef )
 {
     OSStatus err = noErr ;
-    CFURLRef url = CFURLCreateWithFileSystemPath(kCFAllocatorDefault, wxMacCFStringHolder(path ,wxLocale::GetSystemEncoding() ) , kDefaultPathStyle, false);
+    CFMutableStringRef cfMutableString = CFStringCreateMutableCopy(NULL, 0, wxMacCFStringHolder(path ,wxLocale::GetSystemEncoding() ) ) ;
+    CFStringNormalize(cfMutableString,kCFStringNormalizationFormD);    
+    CFURLRef url = CFURLCreateWithFileSystemPath(kCFAllocatorDefault, cfMutableString , kDefaultPathStyle, false);
+    CFRelease( cfMutableString );
     if ( NULL != url )
     {
         if ( CFURLGetFSRef(url, fsRef) == false )
     if ( NULL != url )
     {
         if ( CFURLGetFSRef(url, fsRef) == false )
@@ -903,7 +912,10 @@ wxString wxMacHFSUniStrToString( ConstHFSUniStr255Param uniname )
     CFStringRef cfname = CFStringCreateWithCharacters( kCFAllocatorDefault,
                                                       uniname->unicode,
                                                       uniname->length );
     CFStringRef cfname = CFStringCreateWithCharacters( kCFAllocatorDefault,
                                                       uniname->unicode,
                                                       uniname->length );
-    return wxMacCFStringHolder(cfname).AsString() ;
+    CFMutableStringRef cfMutableString = CFStringCreateMutableCopy(NULL, 0, cfname);
+    CFRelease( cfname );
+    CFStringNormalize(cfMutableString,kCFStringNormalizationFormC);    
+    return wxMacCFStringHolder(cfMutableString).AsString() ;
 }
 
 wxString wxMacFSSpec2MacFilename( const FSSpec *spec )
 }
 
 wxString wxMacFSSpec2MacFilename( const FSSpec *spec )
@@ -1107,8 +1119,19 @@ wxCopyFile (const wxString& file1, const wxString& file2, bool overwrite)
 }
 
 bool
 }
 
 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 )
 #if !defined(__WXWINCE__) && !defined(__WXPALMOS__)
     // Normal system call
   if ( wxRename (file1, file2) == 0 )
@@ -1116,7 +1139,7 @@ wxRenameFile (const wxString& file1, const wxString& file2)
 #endif
 
   // Try to copy
 #endif
 
   // Try to copy
-  if (wxCopyFile(file1, file2)) {
+  if (wxCopyFile(file1, file2, overwrite)) {
     wxRemoveFile(file1);
     return true;
   }
     wxRemoveFile(file1);
     return true;
   }
@@ -1624,44 +1647,11 @@ void WXDLLEXPORT wxSplitPath(const wxChar *pszFileName,
 
 time_t WXDLLEXPORT wxFileModificationTime(const wxString& filename)
 {
 
 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 +1793,7 @@ bool wxIsWild( const wxString& pattern )
 * Written By Douglas A. Lewis <dalewis@cs.Buffalo.EDU>
 *
 * The match procedure is public domain code (from ircII's reg.c)
 * Written By Douglas A. Lewis <dalewis@cs.Buffalo.EDU>
 *
 * 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 )
 */
 
 bool wxMatchWild( const wxString& pat, const wxString& text, bool dot_special )
@@ -1816,11 +1807,8 @@ bool wxMatchWild( const wxString& pat, const wxString& text, bool dot_special )
     const wxChar *m = pat.c_str(),
     *n = text.c_str(),
     *ma = NULL,
     const wxChar *m = pat.c_str(),
     *n = text.c_str(),
     *ma = NULL,
-    *na = NULL,
-    *mp = NULL,
-    *np = NULL;
+    *na = NULL;
     int just = 0,
     int just = 0,
-    pcount = 0,
     acount = 0,
     count = 0;
 
     acount = 0,
     count = 0;
 
@@ -1838,7 +1826,6 @@ bool wxMatchWild( const wxString& pat, const wxString& text, bool dot_special )
             ma = ++m;
             na = n;
             just = 1;
             ma = ++m;
             na = n;
             just = 1;
-            mp = NULL;
             acount = count;
         }
         else if (*m == wxT('?'))
             acount = count;
         }
         else if (*m == wxT('?'))
@@ -1881,8 +1868,6 @@ bool wxMatchWild( const wxString& pat, const wxString& text, bool dot_special )
             if (*m == *n)
             {
                 m++;
             if (*m == *n)
             {
                 m++;
-                if (*n == wxT(' '))
-                    mp = NULL;
                 count++;
                 n++;
             }
                 count++;
                 n++;
             }
@@ -1899,19 +1884,6 @@ bool wxMatchWild( const wxString& pat, const wxString& text, bool dot_special )
                 */
                 if (!*n)
                     return false;
                 */
                 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)
                 {
 
                 if (ma)
                 {