X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/9a83f860948059b0273b5cc6d9e43fadad3ebfca..b404a8f3b072129c107c6d9a5e0f6f53cd34807b:/src/common/filefn.cpp diff --git a/src/common/filefn.cpp b/src/common/filefn.cpp index 6d9401b4a3..d7ed0b83fd 100644 --- a/src/common/filefn.cpp +++ b/src/common/filefn.cpp @@ -64,11 +64,13 @@ #include "wx/msw/mslu.h" // sys/cygwin.h is needed for cygwin_conv_to_full_win32_path() + // and for cygwin_conv_path() // // note that it must be included after #ifdef __GNUWIN32__ #ifdef __CYGWIN__ #include + #include #endif #endif // __GNUWIN32__ @@ -96,10 +98,6 @@ #define _MAXPATHLEN 1024 #endif -#ifndef INVALID_FILE_ATTRIBUTES - #define INVALID_FILE_ATTRIBUTES ((DWORD)-1) -#endif - // ---------------------------------------------------------------------------- // private globals // ---------------------------------------------------------------------------- @@ -309,30 +307,7 @@ static inline CharType* MYcopystring(const CharType* s) bool wxFileExists (const wxString& filename) { -#if defined(__WXPALMOS__) - return false; -#elif defined(__WIN32__) && !defined(__WXMICROWIN__) - // we must use GetFileAttributes() instead of the ANSI C functions because - // it can cope with network (UNC) paths unlike them - DWORD ret = ::GetFileAttributes(filename.fn_str()); - - return (ret != INVALID_FILE_ATTRIBUTES) && !(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 && 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 && S_ISREG(st.st_mode); -#endif -#endif // __WIN32__/!__WIN32__ + return wxFileName::FileExists(filename); } bool @@ -756,16 +731,7 @@ wxChar *wxFileNameFromPath (wxChar *path) wxString wxFileNameFromPath (const wxString& path) { - wxString name, ext; - wxFileName::SplitPath(path, NULL, &name, &ext); - - wxString fullname = name; - if ( !ext.empty() ) - { - fullname << wxFILE_SEP_EXT << ext; - } - - return fullname; + return wxFileName(path).GetFullName(); } // Return just the directory, or NULL if no directory @@ -1085,7 +1051,7 @@ wxCopyFile (const wxString& file1, const wxString& file2, bool overwrite) // instead of our code if available // // NB: 3rd parameter is bFailIfExists i.e. the inverse of overwrite - if ( !::CopyFile(file1.fn_str(), file2.fn_str(), !overwrite) ) + if ( !::CopyFile(file1.t_str(), file2.t_str(), !overwrite) ) { wxLogSysError(_("Failed to copy the file '%s' to '%s'"), file1.c_str(), file2.c_str()); @@ -1102,7 +1068,7 @@ wxCopyFile (const wxString& file1, const wxString& file2, bool overwrite) wxStructStat fbuf; // get permissions of file1 - if ( wxStat( file1.c_str(), &fbuf) != 0 ) + if ( wxStat( file1, &fbuf) != 0 ) { // the file probably doesn't exist or we haven't the rights to read // from it anyhow @@ -1320,54 +1286,7 @@ bool wxRmdir(const wxString& dir, int WXUNUSED(flags)) // does the path exists? (may have or not '/' or '\\' at the end) bool wxDirExists(const wxString& pathName) { - wxString strPath(pathName); - -#if defined(__WINDOWS__) || defined(__OS2__) - // 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 - // the paths "d:\" (which are different from "d:") nor for just "\" - while ( wxEndsWithPathSeparator(strPath) ) - { - size_t len = strPath.length(); - if ( len == 1 || (len == 3 && strPath[len - 2] == wxT(':')) ) - break; - - strPath.Truncate(len - 1); - } -#endif // __WINDOWS__ - -#ifdef __OS2__ - // OS/2 can't handle "d:", it wants either "d:\" or "d:." - if (strPath.length() == 2 && strPath[1u] == wxT(':')) - strPath << wxT('.'); -#endif - -#if defined(__WXPALMOS__) - return false; -#elif defined(__WIN32__) && !defined(__WXMICROWIN__) - // stat() can't cope with network paths - DWORD ret = ::GetFileAttributes(strPath.fn_str()); - - return (ret != INVALID_FILE_ATTRIBUTES) && (ret & FILE_ATTRIBUTE_DIRECTORY); -#elif defined(__OS2__) - FILESTATUS3 Info = {{0}}; - APIRET rc = ::DosQueryPathInfo((PSZ)(WXSTRINGCAST strPath), FIL_STANDARD, - (void*) &Info, sizeof(FILESTATUS3)); - - return ((rc == NO_ERROR) && (Info.attrFile & FILE_DIRECTORY)) || - (rc == ERROR_SHARING_VIOLATION); - // If we got a sharing violation, there must be something with this name. -#else // !__WIN32__ - - wxStructStat st; -#ifndef __VISAGECPP__ - return wxStat(strPath.c_str(), &st) == 0 && ((st.st_mode & S_IFMT) == S_IFDIR); -#else - // S_IFMT not supported in VA compilers.. st_mode is a 2byte value only - return wxStat(strPath.c_str(), &st) == 0 && (st.st_mode == S_IFDIR); -#endif - -#endif // __WIN32__/!__WIN32__ + return wxFileName::DirExists(pathName); } #if WXWIN_COMPATIBILITY_2_8 @@ -1426,7 +1345,7 @@ wxString wxFindFirstFile(const wxString& spec, int flags) if ( !gs_dir->IsOpened() ) { - wxLogSysError(_("Can not enumerate files '%s'"), spec); + wxLogSysError(_("Cannot enumerate files '%s'"), spec); return wxEmptyString; } @@ -1575,11 +1494,19 @@ wxChar *wxDoGetCwd(wxChar *buf, int sz) // another example of DOS/Unix mix (Cygwin) wxString pathUnix = buf; #if wxUSE_UNICODE + #if CYGWIN_VERSION_DLL_MAJOR >= 1007 + cygwin_conv_path(CCP_POSIX_TO_WIN_W, pathUnix.mb_str(wxConvFile), buf, sz); + #else char bufA[_MAXPATHLEN]; cygwin_conv_to_full_win32_path(pathUnix.mb_str(wxConvFile), bufA); wxConvFile.MB2WC(buf, bufA, sz); + #endif #else + #if CYGWIN_VERSION_DLL_MAJOR >= 1007 + cygwin_conv_path(CCP_POSIX_TO_WIN_A, pathUnix, buf, sz); + #else cygwin_conv_to_full_win32_path(pathUnix, buf); + #endif #endif // wxUSE_UNICODE #endif // __CYGWIN__ } @@ -1670,7 +1597,7 @@ wxString wxGetOSDirectory() GetWindowsDirectory(buf, 256); return wxString(buf); #elif defined(__WXMAC__) && wxOSX_USE_CARBON - return wxMacFindFolder(kOnSystemDisk, 'macs', false); + return wxMacFindFolderNoSeparator(kOnSystemDisk, 'macs', false); #else return wxEmptyString; #endif