X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/c35c94f6cd6bba8462155cf7239a03f33640ee17..bf4a027ddba692bb28e7ebbe5b64c2411adbdd06:/src/common/filefn.cpp diff --git a/src/common/filefn.cpp b/src/common/filefn.cpp index fd4b6b7ae9..935fa8608c 100644 --- a/src/common/filefn.cpp +++ b/src/common/filefn.cpp @@ -75,7 +75,7 @@ #include #include "wx/os2/private.h" #endif -#if defined(__WINDOWS__) && !defined(__WXMICROWIN__) +#if defined(__WINDOWS__) && !defined(__WXMICROWIN__) && !defined(__WXWINE__) #if !defined( __GNUWIN32__ ) && !defined( __MWERKS__ ) && !defined(__SALFORDC__) #include #include @@ -326,18 +326,16 @@ wxString wxPathList::FindAbsoluteValidPath (const wxString& file) bool wxFileExists (const wxString& filename) { + // we must use GetFileAttributes() instead of the ANSI C functions because + // it can cope with network (UNC) paths unlike them #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( filename, &stbuf) == 0 ) - return TRUE; - - return FALSE; -#endif +#else // !__WIN32__ + wxStructStat st; + return wxStat(filename, &st) == 0 && (st.st_mode & S_IFREG); +#endif // __WIN32__/!__WIN32__ } bool @@ -920,26 +918,40 @@ wxString wxMacFSSpec2MacFilename( const FSSpec *spec ) return result ; } +#ifndef __DARWIN__ +// Mac file names are POSIX (Unix style) under Darwin +// therefore the conversion functions below are not needed + +static char sMacFileNameConversion[ 1000 ] ; +#endif void wxMacFilename2FSSpec( const char *path , FSSpec *spec ) { + OSStatus err = noErr ; #ifdef __DARWIN__ FSRef theRef; // get the FSRef associated with the POSIX path - (void) FSPathMakeRef((const UInt8 *) path, &theRef, NULL); + err = FSPathMakeRef((const UInt8 *) path, &theRef, NULL); // convert the FSRef to an FSSpec - (void) FSGetCatalogInfo(&theRef, kFSCatInfoNone, NULL, NULL, spec, NULL); + err = FSGetCatalogInfo(&theRef, kFSCatInfoNone, NULL, NULL, spec, NULL); #else - FSpLocationFromFullPath( strlen(path) , path , spec ) ; + if ( strchr( path , ':' ) == NULL ) + { + // try whether it is a volume / or a mounted volume + strncpy( sMacFileNameConversion , path , 1000 ) ; + sMacFileNameConversion[998] = 0 ; + strcat( sMacFileNameConversion , ":" ) ; + err = FSpLocationFromFullPath( strlen(sMacFileNameConversion) , sMacFileNameConversion , spec ) ; + } + else + { + err = FSpLocationFromFullPath( strlen(path) , path , spec ) ; + } #endif } #ifndef __DARWIN__ -// Mac file names are POSIX (Unix style) under Darwin -// therefore the conversion functions below are not needed - -static char sMacFileNameConversion[ 1000 ] ; wxString wxMac2UnixFilename (const char *str) { @@ -1522,15 +1534,11 @@ wxChar *wxGetWorkingDirectory(wxChar *buf, int sz) wxString wxGetCwd() { - wxString str; - - // we can't create wxStringBuffer object inline: Sun CC generates buggy - // code in this case! - { - wxStringBuffer buf(str, _MAXPATHLEN); - wxGetWorkingDirectory(buf, _MAXPATHLEN); - } - + wxChar *buffer = new wxChar[_MAXPATHLEN]; + wxGetWorkingDirectory(buffer, _MAXPATHLEN); + wxString str( buffer ); + delete [] buffer; + return str; }