Stub out a Path::GetMainExecutable call to find the path to the

main executable of a program.  This needs to be implemented on windows.

llvm-svn: 47835
This commit is contained in:
Chris Lattner 2008-03-03 02:55:43 +00:00
parent f818270d43
commit 5b84600196
3 changed files with 28 additions and 0 deletions

View File

@ -161,6 +161,10 @@ namespace sys {
/// @returns The dynamic link library suffix for the current platform.
/// @brief Return the dynamic link library suffix.
static std::string GetDLLSuffix();
/// GetMainExecutable - Return the path to the main executable, given the
/// value of argv[0] from program startup and the address of main itself.
static Path GetMainExecutable(const char *argv0, void *MainAddr);
/// This is one of the very few ways in which a path can be constructed
/// with a syntactically invalid name. The only *legal* invalid name is an

View File

@ -47,6 +47,10 @@
# endif
#endif
#if HAVE_DLFCN_H
#include <dlfcn.h>
#endif
// Put in a hack for Cygwin which falsely reports that the mkdtemp function
// is available when it is not.
#ifdef __CYGWIN__
@ -244,6 +248,20 @@ Path::GetCurrentDirectory() {
return Path(pathname);
}
/// GetMainExecutable - Return the path to the main executable, given the
/// value of argv[0] from program startup.
Path Path::GetMainExecutable(const char *argv0, void *MainAddr) {
// Use dladdr to get executable path if available.
#ifdef HAVE_DLFCN_H
Dl_info DLInfo;
int err = dladdr(MainAddr, &DLInfo);
if (err != 0)
return Path(std::string(DLInfo.dli_fname));
#endif
return Path();
}
std::string
Path::getBasename() const {
// Find the last slash

View File

@ -214,6 +214,12 @@ Path::GetCurrentDirectory() {
return Path(pathname);
}
/// GetMainExecutable - Return the path to the main executable, given the
/// value of argv[0] from program startup.
Path Path::GetMainExecutable(const char *argv0, void *MainAddr) {
return Path();
}
// FIXME: the above set of functions don't map to Windows very well.