X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/ca7d651d5dcc2e976a64a0c1718e58dc338f19a9..0e2d29867082dec183b9363e913fa7a7dd29862a:/src/unix/stdpaths.cpp?ds=inline diff --git a/src/unix/stdpaths.cpp b/src/unix/stdpaths.cpp index f662d45cfc..fc50fe8ae5 100644 --- a/src/unix/stdpaths.cpp +++ b/src/unix/stdpaths.cpp @@ -38,6 +38,10 @@ #include #endif +#if defined(__WXMAC__) + #include "wx/mac/private.h" +#endif + // ============================================================================ // wxStandardPaths implementation // ============================================================================ @@ -53,36 +57,35 @@ void wxStandardPaths::SetInstallPrefix(const wxString& prefix) wxString wxStandardPaths::GetInstallPrefix() const { - if (m_prefix.empty()) + if ( m_prefix.empty() ) { wxStandardPaths *pathPtr = wx_const_cast(wxStandardPaths *, this); #ifdef __LINUX__ - // under Linux, we can get location of the executable - wxChar buf[4096]; - int result; - - // FIXME: is readlink() Unicode-aware or not??? - result = readlink( (const char*)wxT("/proc/self/exe"), (char*)buf, WXSIZEOF(buf) - sizeof(wxChar) ); - if (result != -1) + // under Linux, we can try to infer the prefix from the location of the + // executable + char buf[4096]; + int result = readlink("/proc/self/exe", buf, WXSIZEOF(buf) - sizeof(char)); + if ( result != -1 ) { - buf[result] = wxChar(0); - wxString exeStr( buf, wxConvLibc ); + buf[result] = '\0'; // readlink() doesn't NUL-terminate the buffer + + wxString exeStr(buf, wxConvLibc); // consider that we're in the last "bin" subdirectory of our prefix - wxString basename( wxString(wxTheApp->argv[0]).AfterLast( wxChar('/')) ); - size_t pos = exeStr.find( wxT("/bin/") + basename ); - if (pos != wxString::npos) - pathPtr->m_prefix.assign( exeStr, 0, pos ); + wxString basename(wxString(wxTheApp->argv[0]).AfterLast(_T('/'))); + size_t pos = exeStr.find(wxT("/bin/") + basename); + if ( pos != wxString::npos ) + pathPtr->m_prefix.assign(exeStr, 0, pos); } #endif // __LINUX__ - if (m_prefix.empty()) + if ( m_prefix.empty() ) { #ifdef __VMS - pathPtr->m_prefix = wxT("/sys$system"); + pathPtr->m_prefix = wxT("/sys$system"); #else - pathPtr->m_prefix = wxT("/usr/local"); + pathPtr->m_prefix = wxT("/usr/local"); #endif } } @@ -130,6 +133,8 @@ wxString wxStandardPaths::GetUserDataDir() const { #ifdef __VMS return wxFileName::GetHomeDir(); +#elif defined(__WXMAC__) + return AppendAppName(wxMacFindFolder((short) kUserDomain, kApplicationSupportFolderType, kDontCreateFolder)); #else return AppendAppName(wxFileName::GetHomeDir() + _T("/.")); #endif