forked from OSchip/llvm-project
Change the MacOSX Symbols::DownloadObjectAndSymbolFile to look up
"~rc" via getpwnam() instead of doing tilde expansion and doing soft-link dereferencing via realpath() - if we're pointing to a softlink, leave it as-is. <rdar://problem/12597698> llvm-svn: 167052
This commit is contained in:
parent
1296b59522
commit
055c57b7ce
|
@ -11,6 +11,7 @@
|
|||
|
||||
// C Includes
|
||||
#include <dirent.h>
|
||||
#include <pwd.h>
|
||||
#include "llvm/Support/MachO.h"
|
||||
|
||||
// C++ Includes
|
||||
|
@ -696,14 +697,29 @@ Symbols::DownloadObjectAndSymbolFile (ModuleSpec &module_spec, bool force_lookup
|
|||
|
||||
if (!g_dsym_for_uuid_exe_exists)
|
||||
{
|
||||
dsym_for_uuid_exe_spec.SetFile("~rc/bin/dsymForUUID", true);
|
||||
dsym_for_uuid_exe_spec.SetFile("/usr/local/bin/dsymForUUID", false);
|
||||
g_dsym_for_uuid_exe_exists = dsym_for_uuid_exe_spec.Exists();
|
||||
if (!g_dsym_for_uuid_exe_exists)
|
||||
{
|
||||
dsym_for_uuid_exe_spec.SetFile("/usr/local/bin/dsymForUUID", false);
|
||||
int bufsize;
|
||||
if ((bufsize = sysconf(_SC_GETPW_R_SIZE_MAX)) != -1)
|
||||
{
|
||||
char buffer[bufsize];
|
||||
struct passwd pwd;
|
||||
struct passwd *tilde_rc = NULL;
|
||||
// we are a library so we need to use the reentrant version of getpwnam()
|
||||
if (getpwnam_r ("rc", &pwd, buffer, bufsize, &tilde_rc) == 0
|
||||
&& tilde_rc
|
||||
&& tilde_rc->pw_dir)
|
||||
{
|
||||
std::string dsymforuuid_path(tilde_rc->pw_dir);
|
||||
dsymforuuid_path += "/bin/dsymForUUID";
|
||||
dsym_for_uuid_exe_spec.SetFile(dsymforuuid_path.c_str(), false);
|
||||
g_dsym_for_uuid_exe_exists = dsym_for_uuid_exe_spec.Exists();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
if (!g_dsym_for_uuid_exe_exists && g_dbgshell_command != NULL)
|
||||
{
|
||||
dsym_for_uuid_exe_spec.SetFile(g_dbgshell_command, true);
|
||||
|
|
Loading…
Reference in New Issue