X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/97e324eff05f010ce59985c670bbe501edfa75c2..75736a9c818f10e49b51506d967759fbecb4fa66:/src/common/filefn.cpp diff --git a/src/common/filefn.cpp b/src/common/filefn.cpp index 293e9feecf..e227020173 100644 --- a/src/common/filefn.cpp +++ b/src/common/filefn.cpp @@ -51,7 +51,7 @@ #endif #if defined(__WXMAC__) - #include "wx/mac/private.h" // includes mac headers + #include "wx/mac/private.h" // includes mac headers #endif #ifdef __WXWINCE__ @@ -751,17 +751,22 @@ wxContractPath (const wxString& filename, const wxString& envname, const wxStrin #endif // Handle User's home (ignore root homes!) - size_t len = 0; - if ((val = wxGetUserHome (user)) != NULL && - (len = wxStrlen(val)) > 2 && - wxStrncmp(dest, val, len) == 0) - { - wxStrcpy(wxFileFunctionsBuffer, wxT("~")); - if (user != wxT("")) - wxStrcat(wxFileFunctionsBuffer, (const wxChar*) user); - wxStrcat(wxFileFunctionsBuffer, dest + len); - wxStrcpy (dest, wxFileFunctionsBuffer); - } + val = wxGetUserHome (user); + if (!val) + return dest; + + const size_t len = wxStrlen(val); + if (len <= 2) + return dest; + + if (wxStrncmp(dest, val, len) == 0) + { + wxStrcpy(wxFileFunctionsBuffer, wxT("~")); + if (user != wxT("")) + wxStrcat(wxFileFunctionsBuffer, (const wxChar*) user); + wxStrcat(wxFileFunctionsBuffer, dest + len); + wxStrcpy (dest, wxFileFunctionsBuffer); + } return dest; } @@ -918,9 +923,28 @@ wxString wxMacFSSpec2MacFilename( const FSSpec *spec ) Str255 theParentPath = "\p"; FSSpec theParentSpec; FSRef theParentRef; + FSRef theRef ; char theFileName[FILENAME_MAX]; char thePath[FILENAME_MAX]; + // we loose the long filename by merely copying the spec->name + // so try the built-ins, which only work if the file exists, but still... + + theErr = FSpMakeFSRef(spec, &theRef); + if ( theErr == noErr ) + { + CFURLRef fullURLRef; + fullURLRef = ::CFURLCreateFromFSRef(NULL, &theRef); +#ifdef __UNIX__ + CFURLPathStyle pathstyle = kCFURLPOSIXPathStyle; +#else + CFURLPathStyle pathstyle = kCFURLHFSPathStyle; +#endif + CFStringRef cfString = CFURLCopyFileSystemPath(fullURLRef, pathstyle); + ::CFRelease( fullURLRef ) ; + return wxMacCFStringHolder(cfString).AsString(wxLocale::GetSystemEncoding()); + } + strcpy(thePath, ""); // GD: Separate file name from path and make a FSRef to the parent @@ -1304,7 +1328,8 @@ bool wxRemoveFile(const wxString& file) || defined(__BORLANDC__) \ || defined(__WATCOMC__) \ || defined(__DMC__) \ - || defined(__GNUWIN32__) + || defined(__GNUWIN32__) \ + || (defined(__MWERKS__) && defined(__MSL__)) int res = wxRemove(file); #elif defined(__WXMAC__) int res = unlink(wxFNCONV(file));