fixed broken code using readlink(): please don't just cast wxChar * to char *, this doesn't risk to ever work
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@36341 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
@@ -58,19 +58,18 @@ wxString wxStandardPaths::GetInstallPrefix() const
|
|||||||
wxStandardPaths *pathPtr = wx_const_cast(wxStandardPaths *, this);
|
wxStandardPaths *pathPtr = wx_const_cast(wxStandardPaths *, this);
|
||||||
|
|
||||||
#ifdef __LINUX__
|
#ifdef __LINUX__
|
||||||
// under Linux, we can get location of the executable
|
// under Linux, we can try to infer the prefix from the location of the
|
||||||
wxChar buf[4096];
|
// executable
|
||||||
int result;
|
char buf[4096];
|
||||||
|
int result = readlink("/proc/self/exe", buf, WXSIZEOF(buf) - sizeof(char));
|
||||||
// FIXME: is readlink() Unicode-aware or not???
|
|
||||||
result = readlink( (const char*)wxT("/proc/self/exe"), (char*)buf, WXSIZEOF(buf) - sizeof(wxChar) );
|
|
||||||
if ( result != -1 )
|
if ( result != -1 )
|
||||||
{
|
{
|
||||||
buf[result] = wxChar(0);
|
buf[result] = '\0'; // readlink() doesn't NUL-terminate the buffer
|
||||||
|
|
||||||
wxString exeStr(buf, wxConvLibc);
|
wxString exeStr(buf, wxConvLibc);
|
||||||
|
|
||||||
// consider that we're in the last "bin" subdirectory of our prefix
|
// consider that we're in the last "bin" subdirectory of our prefix
|
||||||
wxString basename( wxString(wxTheApp->argv[0]).AfterLast( wxChar('/')) );
|
wxString basename(wxString(wxTheApp->argv[0]).AfterLast(_T('/')));
|
||||||
size_t pos = exeStr.find(wxT("/bin/") + basename);
|
size_t pos = exeStr.find(wxT("/bin/") + basename);
|
||||||
if ( pos != wxString::npos )
|
if ( pos != wxString::npos )
|
||||||
pathPtr->m_prefix.assign(exeStr, 0, pos);
|
pathPtr->m_prefix.assign(exeStr, 0, pos);
|
||||||
|
Reference in New Issue
Block a user