]>
git.saurik.com Git - wxWidgets.git/blob - src/unix/stdpaths.cpp
   1 /////////////////////////////////////////////////////////////////////////////// 
   2 // Name:        unix/stdpaths.cpp 
   3 // Purpose:     wxStandardPaths implementation for Unix & OpenVMS systems 
   4 // Author:      Vadim Zeitlin 
   8 // Copyright:   (c) 2004 Vadim Zeitlin <vadim@wxwindows.org> 
   9 // License:     wxWindows license 
  10 /////////////////////////////////////////////////////////////////////////////// 
  12 // ============================================================================ 
  14 // ============================================================================ 
  16 // ---------------------------------------------------------------------------- 
  18 // ---------------------------------------------------------------------------- 
  20 // for compilers that support precompilation, includes "wx.h". 
  21 #include "wx/wxprec.h" 
  29 #include "wx/stdpaths.h" 
  35 #include "wx/filename.h" 
  37 #if defined( __LINUX__ ) || defined( __VMS ) 
  41 // ============================================================================ 
  42 // common VMS/Unix part of wxStandardPaths implementation 
  43 // ============================================================================ 
  45 void wxStandardPaths::SetInstallPrefix(const wxString
& prefix
) 
  50 wxString 
wxStandardPaths::GetUserConfigDir() const 
  52     return wxFileName::GetHomeDir(); 
  55 // ============================================================================ 
  56 // wxStandardPaths implementation for VMS 
  57 // ============================================================================ 
  61 wxString 
wxStandardPaths::GetInstallPrefix() const 
  63     if ( m_prefix
.empty() ) 
  65         wx_const_cast(wxStandardPaths 
*, this)->m_prefix 
= wxT("/sys$system"); 
  71 wxString 
wxStandardPaths::GetConfigDir() const 
  73    return _T("/sys$manager"); 
  76 wxString 
wxStandardPaths::GetDataDir() const 
  78    return AppendAppName(GetInstallPrefix() + _T("/sys$share")); 
  81 wxString 
wxStandardPaths::GetLocalDataDir() const 
  83    return AppendAppName(_T("/sys$manager")); 
  86 wxString 
wxStandardPaths::GetUserDataDir() const 
  88    return wxFileName::GetHomeDir(); 
  91 wxString 
wxStandardPaths::GetPluginsDir() const 
  93     return wxString(); // TODO: this is wrong, it should return something 
  97 wxStandardPaths::GetLocalizedResourcesDir(const wxChar 
*lang
, 
  98                                           ResourceCat category
) const 
 100     return wxStandardPathsBase::GetLocalizedResourcesDir(lang
, category
); 
 105 // ============================================================================ 
 106 // wxStandardPaths implementation for Unix 
 107 // ============================================================================ 
 109 void wxStandardPaths::DetectPrefix() 
 112     // under Linux, we can try to infer the prefix from the location of the 
 117     int result 
= readlink("/proc/self/exe", buf
, WXSIZEOF(buf
) - sizeof(char)); 
 120         buf
[result
] = '\0'; // readlink() doesn't NUL-terminate the buffer 
 122         // if the /proc/self/exe symlink has been dropped by the kernel for 
 123         // some reason, then readlink() could also return success but 
 124         // "(deleted)" as link destination... 
 125         if ( strcmp(buf
, "(deleted)") != 0 ) 
 126             exeStr 
= wxString(buf
, wxConvLibc
); 
 129     if ( exeStr
.empty() ) 
 131         // UPX-specific hack: when using UPX on linux, the kernel will drop the 
 132         // /proc/self/exe link; in this case we try to look for a special 
 133         // environment variable called "   " which is created by UPX to save 
 134         // /proc/self/exe contents. See 
 135         //      http://sf.net/tracker/?func=detail&atid=309863&aid=1565357&group_id=9863 
 136         // for more information about this issue. 
 137         wxGetEnv(wxT("   "), &exeStr
); 
 140     if ( !exeStr
.empty() ) 
 142         // consider that we're in the last "bin" subdirectory of our prefix 
 143         size_t pos 
= exeStr
.rfind(wxT("/bin/")); 
 144         if ( pos 
!= wxString::npos 
) 
 145             m_prefix
.assign(exeStr
, 0, pos
); 
 149     if ( m_prefix
.empty() ) 
 151         m_prefix 
= wxT("/usr/local"); 
 155 wxString 
wxStandardPaths::GetInstallPrefix() const 
 157     if ( m_prefix
.empty() ) 
 159         wxStandardPaths 
*pathPtr 
= wx_const_cast(wxStandardPaths 
*, this); 
 160         pathPtr
->DetectPrefix(); 
 166 // ---------------------------------------------------------------------------- 
 168 // ---------------------------------------------------------------------------- 
 170 wxString 
wxStandardPaths::GetConfigDir() const 
 175 wxString 
wxStandardPaths::GetDataDir() const 
 177    return AppendAppName(GetInstallPrefix() + _T("/share")); 
 180 wxString 
wxStandardPaths::GetLocalDataDir() const 
 182    return AppendAppName(_T("/etc")); 
 185 wxString 
wxStandardPaths::GetUserDataDir() const 
 187    return AppendAppName(wxFileName::GetHomeDir() + _T("/.")); 
 190 wxString 
wxStandardPaths::GetPluginsDir() const 
 192     return AppendAppName(GetInstallPrefix() + _T("/lib")); 
 196 wxStandardPaths::GetLocalizedResourcesDir(const wxChar 
*lang
, 
 197                                           ResourceCat category
) const 
 199     if ( category 
!= ResourceCat_Messages 
) 
 200         return wxStandardPathsBase::GetLocalizedResourcesDir(lang
, category
); 
 202     return GetInstallPrefix() + _T("/share/locale/") + lang 
+ _T("/LC_MESSAGES"); 
 205 #endif // __VMS/!__VMS 
 207 #endif // wxUSE_STDPATHS