X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/2fe0ef8a1e4a61e3baab7f6e512b28543ad4c97c..45e0dc94770d598a1cc84d83730d470dd1cfbcca:/src/common/filefn.cpp diff --git a/src/common/filefn.cpp b/src/common/filefn.cpp index 1c498fa3b0..583c0711b3 100644 --- a/src/common/filefn.cpp +++ b/src/common/filefn.cpp @@ -93,13 +93,6 @@ #endif #endif -#ifdef __GNUWIN32__ - #include - #ifndef __TWIN32__ - #include - #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. @@ -121,7 +114,20 @@ #ifdef __WINDOWS__ #include -#endif + + // sys/cygwin.h is needed for cygwin_conv_to_full_win32_path() + // + // note that it must be included after + #ifdef __GNUWIN32__ + #ifdef __CYGWIN__ + #include + #endif + #include + #ifndef __TWIN32__ + #include + #endif + #endif // __GNUWIN32__ +#endif // __WINDOWS__ // TODO: Borland probably has _wgetcwd as well? #ifdef _MSC_VER @@ -295,11 +301,11 @@ wxString wxPathList::FindAbsoluteValidPath (const wxString& file) 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 ) @@ -317,7 +323,7 @@ wxIsAbsolutePath (const wxString& filename) #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. @@ -683,7 +689,7 @@ wxChar *wxFileNameFromPath (wxChar *path) if (path) { register wxChar *tcp; - + tcp = path + wxStrlen (path); while (--tcp >= path) { @@ -717,7 +723,7 @@ wxString wxFileNameFromPath (const wxString& path1) { wxChar *path = WXSTRINGCAST path1 ; register wxChar *tcp; - + tcp = path + wxStrlen (path); while (--tcp >= path) { @@ -754,13 +760,13 @@ wxPathOnly (wxChar *path) if (path && *path) { static wxChar buf[_MAXPATHLEN]; - + // Local copy wxStrcpy (buf, path); - + int l = wxStrlen(path); int i = l - 1; - + // Search backward for a backward or forward slash while (i > -1) { @@ -789,7 +795,7 @@ wxPathOnly (wxChar *path) #endif i --; } - + #if defined(__WXMSW__) || defined(__WXPM__) // Try Drive specifier if (wxIsalpha (buf[0]) && buf[1] == wxT(':')) @@ -810,10 +816,10 @@ wxString wxPathOnly (const wxString& path) if (path != wxT("")) { wxChar buf[_MAXPATHLEN]; - + // Local copy wxStrcpy (buf, WXSTRINGCAST path); - + int l = path.Length(); int i = l - 1; @@ -845,7 +851,7 @@ wxString wxPathOnly (const wxString& path) #endif i --; } - + #if defined(__WXMSW__) || defined(__WXPM__) // Try Drive specifier if (wxIsalpha (buf[0]) && buf[1] == wxT(':')) @@ -875,7 +881,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) ); - + // create path string for return value wxString result( thePath ) ; #else @@ -889,7 +895,7 @@ wxString wxMacFSSpec2MacFilename( const FSSpec *spec ) (*myPath)[length] = 0 ; if ((length > 0) && ((*myPath)[length-1] == ':')) (*myPath)[length-1] = 0 ; - + // create path string for return value wxString result( (char*) *myPath ) ; @@ -932,7 +938,7 @@ wxString wxMac2UnixFilename (const char *str) *s = '.' ; else *s = '/' ; - + while (*s) { if (*s == ':') @@ -1256,6 +1262,7 @@ bool wxRmdir(const wxString& dir, int WXUNUSED(flags)) 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 @@ -1270,12 +1277,12 @@ bool wxPathExists(const wxChar *pszPathName) } #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__ @@ -1287,7 +1294,7 @@ bool wxPathExists(const wxChar *pszPathName) (st.st_mode == S_IFDIR); #endif -#endif +#endif // __WIN32__/!__WIN32__ } // Get a temporary filename, opening and closing the file. @@ -1328,13 +1335,13 @@ wxString wxFindFirstFile(const wxChar *spec, int flags) 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; } - + int dirFlags = 0; switch (flags) { @@ -1342,7 +1349,7 @@ wxString wxFindFirstFile(const wxChar *spec, int flags) 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() ) @@ -1360,13 +1367,13 @@ wxString wxFindNextFile() wxString result; gs_dir->GetNext(&result); - + if ( result.IsEmpty() ) { wxDELETE(gs_dir); return result; } - + return gs_dirPath + result; } @@ -1456,11 +1463,11 @@ wxChar *wxGetWorkingDirectory(wxChar *buf, int sz) } #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); -#endif // __CYGWIN10__ +#endif // __CYGWIN__ // finally convert the result to Unicode if needed #if wxUSE_UNICODE && !defined(HAVE_WGETCWD)