X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/c320b3e32d8da0d3d09983e26efe01eb322b1b53..0e2d29867082dec183b9363e913fa7a7dd29862a:/src/unix/stdpaths.cpp diff --git a/src/unix/stdpaths.cpp b/src/unix/stdpaths.cpp index 2cbcb456d3..fc50fe8ae5 100644 --- a/src/unix/stdpaths.cpp +++ b/src/unix/stdpaths.cpp @@ -1,6 +1,6 @@ /////////////////////////////////////////////////////////////////////////////// // Name: unix/stdpaths.cpp -// Purpose: wxStandardPaths implementation for Unix systems +// Purpose: wxStandardPaths implementation for Unix & OpenVMS systems // Author: Vadim Zeitlin // Modified by: // Created: 2004-10-19 @@ -24,6 +24,8 @@ #pragma hdrstop #endif +#if wxUSE_STDPATHS + #ifndef WX_PRECOMP #include "wx/app.h" #endif //WX_PRECOMP @@ -32,10 +34,14 @@ #include "wx/stdpaths.h" -#ifdef __LINUX__ +#if defined( __LINUX__ ) || defined( __VMS ) #include #endif +#if defined(__WXMAC__) + #include "wx/mac/private.h" +#endif + // ============================================================================ // wxStandardPaths implementation // ============================================================================ @@ -53,26 +59,34 @@ wxString wxStandardPaths::GetInstallPrefix() const { if ( m_prefix.empty() ) { - wxStandardPaths *self = wx_const_cast(wxStandardPaths *, this); + wxStandardPaths *pathPtr = wx_const_cast(wxStandardPaths *, this); #ifdef __LINUX__ - // under Linux, we can get location of the executable - wxString exe; - if ( readlink("/proc/self/exe", wxStringBuffer(exe), 1024) != -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] = '\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(_T('/'))); - size_t pos = exe.find(_T("/bin/") + basename); + size_t pos = exeStr.find(wxT("/bin/") + basename); if ( pos != wxString::npos ) - { - self->m_prefix.assign(exe, 0, pos); - } + pathPtr->m_prefix.assign(exeStr, 0, pos); } +#endif // __LINUX__ if ( m_prefix.empty() ) -#endif // __LINUX__ { - self->m_prefix = _T("/usr/local"); +#ifdef __VMS + pathPtr->m_prefix = wxT("/sys$system"); +#else + pathPtr->m_prefix = wxT("/usr/local"); +#endif } } @@ -85,7 +99,11 @@ wxString wxStandardPaths::GetInstallPrefix() const wxString wxStandardPaths::GetConfigDir() const { - return _T("/etc"); +#ifdef __VMS + return _T("/sys$manager"); +#else + return _T("/etc"); +#endif } wxString wxStandardPaths::GetUserConfigDir() const @@ -95,17 +113,31 @@ wxString wxStandardPaths::GetUserConfigDir() const wxString wxStandardPaths::GetDataDir() const { - return AppendAppName(GetInstallPrefix() + _T("/share")); +#ifdef __VMS + return AppendAppName(GetInstallPrefix() + _T("/sys$share")); +#else + return AppendAppName(GetInstallPrefix() + _T("/share")); +#endif } wxString wxStandardPaths::GetLocalDataDir() const { - return AppendAppName(_T("/etc")); +#ifdef __VMS + return AppendAppName(_T("/sys$manager")); +#else + return AppendAppName(_T("/etc")); +#endif } wxString wxStandardPaths::GetUserDataDir() const { - return AppendAppName(wxFileName::GetHomeDir() + _T("/.")); +#ifdef __VMS + return wxFileName::GetHomeDir(); +#elif defined(__WXMAC__) + return AppendAppName(wxMacFindFolder((short) kUserDomain, kApplicationSupportFolderType, kDontCreateFolder)); +#else + return AppendAppName(wxFileName::GetHomeDir() + _T("/.")); +#endif } wxString wxStandardPaths::GetPluginsDir() const @@ -113,3 +145,4 @@ wxString wxStandardPaths::GetPluginsDir() const return wxString(); } +#endif // wxUSE_STDPATHS