X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/3ffbc733a20ffbda22abece30b4a1afb5c8bc75d..59c962bf54667cab735353b2ec3b7a2438464f22:/src/common/filefn.cpp diff --git a/src/common/filefn.cpp b/src/common/filefn.cpp index fca7a284a1..583c0711b3 100644 --- a/src/common/filefn.cpp +++ b/src/common/filefn.cpp @@ -119,7 +119,9 @@ // // note that it must be included after #ifdef __GNUWIN32__ - #include + #ifdef __CYGWIN__ + #include + #endif #include #ifndef __TWIN32__ #include @@ -299,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 ) @@ -321,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. @@ -687,7 +689,7 @@ wxChar *wxFileNameFromPath (wxChar *path) if (path) { register wxChar *tcp; - + tcp = path + wxStrlen (path); while (--tcp >= path) { @@ -721,7 +723,7 @@ wxString wxFileNameFromPath (const wxString& path1) { wxChar *path = WXSTRINGCAST path1 ; register wxChar *tcp; - + tcp = path + wxStrlen (path); while (--tcp >= path) { @@ -758,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) { @@ -793,7 +795,7 @@ wxPathOnly (wxChar *path) #endif i --; } - + #if defined(__WXMSW__) || defined(__WXPM__) // Try Drive specifier if (wxIsalpha (buf[0]) && buf[1] == wxT(':')) @@ -814,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; @@ -849,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(':')) @@ -879,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 @@ -893,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 ) ; @@ -936,7 +938,7 @@ wxString wxMac2UnixFilename (const char *str) *s = '.' ; else *s = '/' ; - + while (*s) { if (*s == ':') @@ -1260,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 @@ -1274,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__ @@ -1291,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. @@ -1332,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) { @@ -1346,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() ) @@ -1364,13 +1367,13 @@ wxString wxFindNextFile() wxString result; gs_dir->GetNext(&result); - + if ( result.IsEmpty() ) { wxDELETE(gs_dir); return result; } - + return gs_dirPath + result; } @@ -1460,11 +1463,11 @@ wxChar *wxGetWorkingDirectory(wxChar *buf, int sz) } #endif // __DJGPP__ -#ifdef __GNUWIN32__ +#ifdef __CYGWIN__ // another example of DOS/Unix mix (Cygwin) wxString pathUnix = buf; cygwin_conv_to_full_win32_path(pathUnix, buf); -#endif // __GNUWIN32__ +#endif // __CYGWIN__ // finally convert the result to Unicode if needed #if wxUSE_UNICODE && !defined(HAVE_WGETCWD)