X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/161f4f7380e945b0769ad5f7122df55b8777396a..e1bdd5078c90d3813a815fc86ee3dd050b2ee1d3:/src/common/filefn.cpp diff --git a/src/common/filefn.cpp b/src/common/filefn.cpp index a377d28958..1f02317c40 100644 --- a/src/common/filefn.cpp +++ b/src/common/filefn.cpp @@ -115,11 +115,11 @@ extern wxChar *wxBuffer; -#if defined(__WXMAC__) && !defined(__UNIX__) - #include "morefile.h" - #include "moreextr.h" - #include "fullpath.h" - #include "fspcompa.h" +#ifdef __WXMAC__ +# include "MoreFiles.h" +# include "MoreFilesExtras.h" +# include "FullPath.h" +# include "FSpCompat.h" #endif IMPLEMENT_DYNAMIC_CLASS(wxPathList, wxStringList) @@ -143,7 +143,11 @@ const off_t wxInvalidOffset = (off_t)-1; // ---------------------------------------------------------------------------- // we need to translate Mac filenames before passing them to OS functions +#if defined(__WXMAC__) && defined(__DARWIN__) + #define OS_FILENAME(s) wxMac2UnixFilename(s.fn_str()) +#else #define OS_FILENAME(s) (s.fn_str()) +#endif // ============================================================================ // implementation @@ -272,8 +276,11 @@ wxString wxPathList::FindAbsoluteValidPath (const wxString& file) bool wxFileExists (const wxString& filename) { -#ifdef __GNUWIN32__ // (fix a B20 bug) - return GetFileAttributes(filename) != 0xFFFFFFFF; +#ifdef __WINDOWS__ + // GetFileAttributes can copy with network paths + DWORD ret = GetFileAttributes(filename); + DWORD isDir = (ret & FILE_ATTRIBUTE_DIRECTORY); + return ((ret != 0xffffffff) && (isDir == 0)); #else wxStructStat stbuf; if ( !filename.empty() && wxStat (OS_FILENAME(filename), &stbuf) == 0 ) @@ -287,12 +294,16 @@ bool wxIsAbsolutePath (const wxString& filename) { #ifdef __WXMAC__ - if (filename != wxT("")) - { - if( filename.Find(':') != wxNOT_FOUND && filename[0] != ':' ) - return TRUE ; - } - return FALSE ; + if (filename != wxT("")) + { + // 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. + + if (filename.Find(':') != wxNOT_FOUND && filename[0] != ':') + return TRUE ; + } + return FALSE ; #else if (filename != wxT("")) { @@ -822,7 +833,7 @@ wxString wxPathOnly (const wxString& path) // and back again - or we get nasty problems with delimiters. // Also, convert to lower case, since case is significant in UNIX. -#if defined(__WXMAC__) && !defined(__UNIX__) +#if defined(__WXMAC__) wxString wxMacFSSpec2MacFilename( const FSSpec *spec ) { Handle myPath ; @@ -846,7 +857,6 @@ void wxMacFilename2FSSpec( const char *path , FSSpec *spec ) FSpLocationFromFullPath( strlen(path ) , path , spec ) ; } -/* static char sMacFileNameConversion[ 1000 ] ; wxString wxMac2UnixFilename (const char *str) @@ -918,17 +928,12 @@ wxString wxMacFSSpec2UnixFilename( const FSSpec *spec ) return wxMac2UnixFilename( wxMacFSSpec2MacFilename( spec) ) ; } -void wxMacFilename2FSSpec( const char *path , FSSpec *spec ) -{ - FSpLocationFromFullPath( strlen(path ) , path , spec ) ; -} - void wxUnixFilename2FSSpec( const char *path , FSSpec *spec ) { wxString var = wxUnix2MacFilename( path ) ; wxMacFilename2FSSpec( var , spec ) ; } -*/ + #endif void wxDos2UnixFilename (char *s) @@ -1008,7 +1013,7 @@ wxConcatFiles (const wxString& file1, const wxString& file2, const wxString& fil bool wxCopyFile (const wxString& file1, const wxString& file2, bool overwrite) { -#if defined(__WIN32__) +#if defined(__WIN32__) && !defined(__WXMICROWIN__) // CopyFile() copies file attributes and modification time too, so use it // instead of our code if available // @@ -1135,7 +1140,7 @@ bool wxMkdir(const wxString& dir, int perm) // assume mkdir() has 2 args on non Windows-OS/2 platforms and on Windows too // for the GNU compiler -#if (!(defined(__WXMSW__) || defined(__WXPM__))) || (defined(__GNUWIN32__) && !defined(__MINGW32__)) || defined(__WXWINE__) +#if (!(defined(__WXMSW__) || defined(__WXPM__))) || (defined(__GNUWIN32__) && !defined(__MINGW32__)) || defined(__WXWINE__) || defined(__WXMICROWIN__) if ( mkdir(wxFNCONV(dirname), perm) != 0 ) #elif defined(__WXPM__) if (::DosCreateDir((PSZ)dirname, NULL) != 0) // enhance for EAB's?? @@ -1181,13 +1186,20 @@ bool wxPathExists(const wxChar *pszPathName) while ( wxEndsWithPathSeparator(strPath) ) { size_t len = strPath.length(); - if ( len == 1 || strPath[len - 1] == _T(':') ) + if ( len == 1 || (len == 3 && strPath[len - 2] == _T(':')) ) break; strPath.Truncate(len - 1); } #endif // __WINDOWS__ +#ifdef __WINDOWS__ + // 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 + wxStructStat st; #ifndef __VISAGECPP__ return wxStat(wxFNSTRINGCAST strPath.fn_str(), &st) == 0 && @@ -1198,12 +1210,13 @@ bool wxPathExists(const wxChar *pszPathName) (st.st_mode == S_IFDIR); #endif +#endif } // Get a temporary filename, opening and closing the file. wxChar *wxGetTempFileName(const wxString& prefix, wxChar *buf) { -#ifdef __WINDOWS__ +#if defined(__WINDOWS__) && !defined(__WXMICROWIN__) #ifndef __WIN32__ wxChar tmp[144]; @@ -1694,7 +1707,7 @@ wxChar *wxGetWorkingDirectory(wxChar *buf, int sz) char *cbuf = new char[sz+1]; #ifdef _MSC_VER if (_getcwd(cbuf, sz) == NULL) { -#elif defined(__WXMAC__) && !defined(__UNIX__) +#elif defined(__WXMAC__) enum { SFSaveDisk = 0x214, CurDirStore = 0x398 @@ -1822,7 +1835,7 @@ bool wxSetWorkingDirectory(const wxString& d) // On non-Windows platform, probably just return the empty string. wxString wxGetOSDirectory() { -#ifdef __WINDOWS__ +#if defined(__WINDOWS__) && !defined(__WXMICROWIN__) wxChar buf[256]; GetWindowsDirectory(buf, 256); return wxString(buf);