Overview
Examples
Screenshots
Comparisons
Applications
Download
Documentation
Tutorials
Bazaar
Status & Roadmap
FAQ
Authors & License
Forums
Funding Ultimate++
Search on this site
Search in forums












SourceForge.net Logo
Home » U++ Library support » U++ Core » GetExeFilePath() in Linux
Re: GetExeFilePath() in Linux [message #6431 is a reply to message #6411] Sun, 12 November 2006 18:11 Go to previous messageGo to previous message
masu is currently offline  masu
Messages: 378
Registered: February 2006
Senior Member
I tried the latest version and got the right path with mounted proc and also without.

I had to make a tiny change (marked red, therefore the ugly formatting Sad).

luzr wrote on Sat, 11 November 2006 12:48

OK, this is my final version:

const char *procexepath_() {
static char h[_MAX_PATH + 1];
ONCELOCK {
char link[100];
sprintf(link, "/proc/%d/exe", getpid());
int ret = readlink(link, h, _MAX_PATH);
if(ret > 0 && ret < _MAX_PATH)
h[ret] = '\0';
else
*h = '\0';
}
return h;
}

String GetExeFilePath()
{
static String exepath;
ONCELOCK {
const char *exe = procexepath_();
if(*exe)
exepath = exe;
else {
String x = Argv0__;
if(IsFullPath(x) && FileExists(x))
exepath = x;
else {
exepath = GetHomeDirFile("upp");
Vector<String> p = Split(FromSystemCharset(Environment().Get("PATH")), ':');
if(x.Find('/') >= 0)
p.Add(GetCurrentDirectory());
for(int i = 0; i < p.GetCount(); i++) {
String ep = NormalizePath(AppendFileName(p[i], x));
if(FileExists(ep))
exepath = ep;
}
}
}
}
return exepath;
}

Please check.

Mirek

P.S.: I need the name of executable in log files, without using the heap and before entering the main - that is why I have separated "procexepath_"...


Also, I think we should delete the green line since the result defaults to $HOME/app_name even if it does not exist. The application has to be in the PATH or in the current dir if it was not specified with the complete path on the command line. So this assignment is useless in my opinion since we check all possibilities.

Function SetExeTitle does not exist anymore, commented out in idewin.cpp:
	#ifdef _DEBUG
		SetExeTitle("debugide");
	#else
		SetExeTitle("theide");
	#endif


Matthias


931b81e7ea53320dccc37375b34b38c3

[Updated on: Sun, 12 November 2006 18:27]

Report message to a moderator

 
Read Message
Read Message
Read Message
Read Message
Read Message
Read Message
Read Message
Read Message
Read Message
Read Message
Read Message
Read Message
Read Message
Read Message
Read Message
Read Message
Read Message
Read Message
Read Message
Read Message
Read Message
Read Message
Read Message
Read Message
Read Message
Read Message
Read Message
Read Message
Read Message
Previous Topic: Double formatting bug?
Next Topic: How to catch keyboard input?
Goto Forum:
  


Current Time: Sat Aug 16 16:53:52 CEST 2025

Total time taken to generate the page: 0.05330 seconds