]> git.saurik.com Git - wxWidgets.git/blobdiff - src/common/filefn.cpp
corrected double click events: wxMGL will now synthetize
[wxWidgets.git] / src / common / filefn.cpp
index 1c498fa3b0f53c7adb99eb46d7a3b62e0ce99d55..786381d64bf8045f451b6a304ef3d39d79acb502 100644 (file)
     #endif
 #endif
 
     #endif
 #endif
 
-#ifdef __GNUWIN32__
-    #include <wchar.h>
-    #ifndef __TWIN32__
-        #include <sys/unistd.h>
-    #endif
-#endif
-
 #ifdef __BORLANDC__ // Please someone tell me which version of Borland needs
                     // this (3.1 I believe) and how to test for it.
                     // If this works for Borland 4.0 as well, then no worries.
 #ifdef __BORLANDC__ // Please someone tell me which version of Borland needs
                     // this (3.1 I believe) and how to test for it.
                     // If this works for Borland 4.0 as well, then no worries.
 
 #ifdef __WINDOWS__
     #include <windows.h>
 
 #ifdef __WINDOWS__
     #include <windows.h>
-#endif
+
+    // sys/cygwin.h is needed for cygwin_conv_to_full_win32_path()
+    //
+    // note that it must be included after <windows.h>
+    #ifdef __GNUWIN32__
+        #ifdef __CYGWIN__
+            #include <sys/cygwin.h>
+        #endif
+        #include <wchar.h>
+        #ifndef __TWIN32__
+            #include <sys/unistd.h>
+        #endif
+    #endif // __GNUWIN32__
+#endif // __WINDOWS__
 
 // TODO: Borland probably has _wgetcwd as well?
 #ifdef _MSC_VER
 
 // TODO: Borland probably has _wgetcwd as well?
 #ifdef _MSC_VER
     #define _MAXPATHLEN 1024
 #endif
 
     #define _MAXPATHLEN 1024
 #endif
 
-extern wxChar *wxBuffer;
-
 #ifdef __WXMAC__
 #    include "MoreFiles.h"
 #    include "MoreFilesExtras.h"
 #ifdef __WXMAC__
 #    include "MoreFiles.h"
 #    include "MoreFilesExtras.h"
@@ -295,11 +299,11 @@ wxString wxPathList::FindAbsoluteValidPath (const wxString& file)
 bool
 wxFileExists (const wxString& filename)
 {
 bool
 wxFileExists (const wxString& filename)
 {
-#if defined(__WINDOWS__) && !defined(__WXMICROWIN__)
-    // GetFileAttributes can copy with network paths
-    DWORD ret = GetFileAttributes(filename);
-    DWORD isDir = (ret & FILE_ATTRIBUTE_DIRECTORY);
-    return ((ret != 0xffffffff) && (isDir == 0));
+#if defined(__WIN32__) && !defined(__WXMICROWIN__)
+    // GetFileAttributes can copy with network paths unlike stat()
+    DWORD ret = ::GetFileAttributes(filename);
+
+    return (ret != (DWORD)-1) && !(ret & FILE_ATTRIBUTE_DIRECTORY);
 #else
     wxStructStat stbuf;
     if ( !filename.empty() && wxStat (OS_FILENAME(filename), &stbuf) == 0 )
 #else
     wxStructStat stbuf;
     if ( !filename.empty() && wxStat (OS_FILENAME(filename), &stbuf) == 0 )
@@ -317,7 +321,7 @@ wxIsAbsolutePath (const wxString& filename)
 #if defined(__WXMAC__) && !defined(__DARWIN__)
         // Classic or Carbon CodeWarrior like
         // Carbon with Apple DevTools is Unix like
 #if defined(__WXMAC__) && !defined(__DARWIN__)
         // Classic or Carbon CodeWarrior like
         // Carbon with Apple DevTools is Unix like
-        
+
         // This seems wrong to me, but there is no fix. since
         // "MacOS:MyText.txt" is absolute whereas "MyDir:MyText.txt"
         // is not. Or maybe ":MyDir:MyText.txt" has to be used? RR.
         // This seems wrong to me, but there is no fix. since
         // "MacOS:MyText.txt" is absolute whereas "MyDir:MyText.txt"
         // is not. Or maybe ":MyDir:MyText.txt" has to be used? RR.
@@ -683,7 +687,7 @@ wxChar *wxFileNameFromPath (wxChar *path)
     if (path)
     {
         register wxChar *tcp;
     if (path)
     {
         register wxChar *tcp;
-        
+
         tcp = path + wxStrlen (path);
         while (--tcp >= path)
         {
         tcp = path + wxStrlen (path);
         while (--tcp >= path)
         {
@@ -717,7 +721,7 @@ wxString wxFileNameFromPath (const wxString& path1)
     {
         wxChar *path = WXSTRINGCAST path1 ;
         register wxChar *tcp;
     {
         wxChar *path = WXSTRINGCAST path1 ;
         register wxChar *tcp;
-        
+
         tcp = path + wxStrlen (path);
         while (--tcp >= path)
         {
         tcp = path + wxStrlen (path);
         while (--tcp >= path)
         {
@@ -754,13 +758,13 @@ wxPathOnly (wxChar *path)
     if (path && *path)
     {
         static wxChar buf[_MAXPATHLEN];
     if (path && *path)
     {
         static wxChar buf[_MAXPATHLEN];
-        
+
         // Local copy
         wxStrcpy (buf, path);
         // Local copy
         wxStrcpy (buf, path);
-        
+
         int l = wxStrlen(path);
         int i = l - 1;
         int l = wxStrlen(path);
         int i = l - 1;
-        
+
         // Search backward for a backward or forward slash
         while (i > -1)
         {
         // Search backward for a backward or forward slash
         while (i > -1)
         {
@@ -789,7 +793,7 @@ wxPathOnly (wxChar *path)
 #endif
             i --;
         }
 #endif
             i --;
         }
-        
+
 #if defined(__WXMSW__) || defined(__WXPM__)
         // Try Drive specifier
         if (wxIsalpha (buf[0]) && buf[1] == wxT(':'))
 #if defined(__WXMSW__) || defined(__WXPM__)
         // Try Drive specifier
         if (wxIsalpha (buf[0]) && buf[1] == wxT(':'))
@@ -810,10 +814,10 @@ wxString wxPathOnly (const wxString& path)
     if (path != wxT(""))
     {
         wxChar buf[_MAXPATHLEN];
     if (path != wxT(""))
     {
         wxChar buf[_MAXPATHLEN];
-        
+
         // Local copy
         wxStrcpy (buf, WXSTRINGCAST path);
         // Local copy
         wxStrcpy (buf, WXSTRINGCAST path);
-        
+
         int l = path.Length();
         int i = l - 1;
 
         int l = path.Length();
         int i = l - 1;
 
@@ -845,7 +849,7 @@ wxString wxPathOnly (const wxString& path)
 #endif
             i --;
         }
 #endif
             i --;
         }
-        
+
 #if defined(__WXMSW__) || defined(__WXPM__)
         // Try Drive specifier
         if (wxIsalpha (buf[0]) && buf[1] == wxT(':'))
 #if defined(__WXMSW__) || defined(__WXPM__)
         // Try Drive specifier
         if (wxIsalpha (buf[0]) && buf[1] == wxT(':'))
@@ -875,7 +879,7 @@ wxString wxMacFSSpec2MacFilename( const FSSpec *spec )
     (void) FSpMakeFSRef( spec, &theRef );
     // get the POSIX path associated with the FSRef
     (void) FSRefMakePath( &theRef, (UInt8 *)thePath, sizeof(thePath) );
     (void) FSpMakeFSRef( spec, &theRef );
     // get the POSIX path associated with the FSRef
     (void) FSRefMakePath( &theRef, (UInt8 *)thePath, sizeof(thePath) );
-    
+
     // create path string for return value
     wxString result( thePath ) ;
 #else
     // create path string for return value
     wxString result( thePath ) ;
 #else
@@ -889,7 +893,7 @@ wxString wxMacFSSpec2MacFilename( const FSSpec *spec )
     (*myPath)[length] = 0 ;
     if ((length > 0) && ((*myPath)[length-1] == ':'))
         (*myPath)[length-1] = 0 ;
     (*myPath)[length] = 0 ;
     if ((length > 0) && ((*myPath)[length-1] == ':'))
         (*myPath)[length-1] = 0 ;
-    
+
     // create path string for return value
     wxString result( (char*) *myPath ) ;
 
     // create path string for return value
     wxString result( (char*) *myPath ) ;
 
@@ -932,7 +936,7 @@ wxString wxMac2UnixFilename (const char *str)
             *s = '.' ;
         else
             *s = '/' ;
             *s = '.' ;
         else
             *s = '/' ;
-        
+
         while (*s)
         {
             if (*s == ':')
         while (*s)
         {
             if (*s == ':')
@@ -1256,6 +1260,7 @@ bool wxRmdir(const wxString& dir, int WXUNUSED(flags))
 bool wxPathExists(const wxChar *pszPathName)
 {
     wxString strPath(pszPathName);
 bool wxPathExists(const wxChar *pszPathName)
 {
     wxString strPath(pszPathName);
+
 #ifdef __WINDOWS__
     // Windows fails to find directory named "c:\dir\" even if "c:\dir" exists,
     // so remove all trailing backslashes from the path - but don't do this for
 #ifdef __WINDOWS__
     // Windows fails to find directory named "c:\dir\" even if "c:\dir" exists,
     // so remove all trailing backslashes from the path - but don't do this for
@@ -1270,12 +1275,12 @@ bool wxPathExists(const wxChar *pszPathName)
     }
 #endif // __WINDOWS__
 
     }
 #endif // __WINDOWS__
 
-#if defined(__WINDOWS__) && !defined(__WXMICROWIN__)
-    // Stat can't cope with network paths
-    DWORD ret = GetFileAttributes(strPath.c_str());
-    DWORD isDir = (ret & FILE_ATTRIBUTE_DIRECTORY);
-    return ((ret != 0xffffffff) && (isDir != 0));
-#else
+#if defined(__WIN32__) && !defined(__WXMICROWIN__)
+    // stat() can't cope with network paths
+    DWORD ret = ::GetFileAttributes(strPath);
+
+    return (ret != (DWORD)-1) && (ret & FILE_ATTRIBUTE_DIRECTORY);
+#else // !__WIN32__
 
     wxStructStat st;
 #ifndef __VISAGECPP__
 
     wxStructStat st;
 #ifndef __VISAGECPP__
@@ -1287,7 +1292,7 @@ bool wxPathExists(const wxChar *pszPathName)
         (st.st_mode == S_IFDIR);
 #endif
 
         (st.st_mode == S_IFDIR);
 #endif
 
-#endif
+#endif // __WIN32__/!__WIN32__
 }
 
 // Get a temporary filename, opening and closing the file.
 }
 
 // Get a temporary filename, opening and closing the file.
@@ -1328,13 +1333,13 @@ wxString wxFindFirstFile(const wxChar *spec, int flags)
     if (gs_dir)
         delete gs_dir;
     gs_dir = new wxDir(gs_dirPath);
     if (gs_dir)
         delete gs_dir;
     gs_dir = new wxDir(gs_dirPath);
-    
+
     if ( !gs_dir->IsOpened() )
     {
         wxLogSysError(_("Can not enumerate files '%s'"), spec);
         return wxEmptyString;
     }
     if ( !gs_dir->IsOpened() )
     {
         wxLogSysError(_("Can not enumerate files '%s'"), spec);
         return wxEmptyString;
     }
-    
+
     int dirFlags = 0;
     switch (flags)
     {
     int dirFlags = 0;
     switch (flags)
     {
@@ -1342,7 +1347,7 @@ wxString wxFindFirstFile(const wxChar *spec, int flags)
         case wxFILE: dirFlags = wxDIR_FILES; break;
         default:     dirFlags = wxDIR_DIRS | wxDIR_FILES; break;
     }
         case wxFILE: dirFlags = wxDIR_FILES; break;
         default:     dirFlags = wxDIR_DIRS | wxDIR_FILES; break;
     }
-    
+
     wxString result;
     gs_dir->GetFirst(&result, wxFileNameFromPath(spec), dirFlags);
     if ( result.IsEmpty() )
     wxString result;
     gs_dir->GetFirst(&result, wxFileNameFromPath(spec), dirFlags);
     if ( result.IsEmpty() )
@@ -1360,13 +1365,13 @@ wxString wxFindNextFile()
 
     wxString result;
     gs_dir->GetNext(&result);
 
     wxString result;
     gs_dir->GetNext(&result);
-    
+
     if ( result.IsEmpty() )
     {
         wxDELETE(gs_dir);
         return result;
     }
     if ( result.IsEmpty() )
     {
         wxDELETE(gs_dir);
         return result;
     }
-    
+
     return gs_dirPath + result;
 }
 
     return gs_dirPath + result;
 }
 
@@ -1456,11 +1461,11 @@ wxChar *wxGetWorkingDirectory(wxChar *buf, int sz)
         }
 #endif // __DJGPP__
 
         }
 #endif // __DJGPP__
 
-#ifdef __CYGWIN10__
-        // another example of DOS/Unix mix
+#ifdef __CYGWIN__
+        // another example of DOS/Unix mix (Cygwin)
         wxString pathUnix = buf;
         cygwin_conv_to_full_win32_path(pathUnix, buf);
         wxString pathUnix = buf;
         cygwin_conv_to_full_win32_path(pathUnix, buf);
-#endif // __CYGWIN10__
+#endif // __CYGWIN__
 
         // finally convert the result to Unicode if needed
 #if wxUSE_UNICODE && !defined(HAVE_WGETCWD)
 
         // finally convert the result to Unicode if needed
 #if wxUSE_UNICODE && !defined(HAVE_WGETCWD)