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
|
// C Includes
|
||||||
#include <dirent.h>
|
#include <dirent.h>
|
||||||
|
#include <pwd.h>
|
||||||
#include "llvm/Support/MachO.h"
|
#include "llvm/Support/MachO.h"
|
||||||
|
|
||||||
// C++ Includes
|
// C++ Includes
|
||||||
|
@ -696,14 +697,29 @@ Symbols::DownloadObjectAndSymbolFile (ModuleSpec &module_spec, bool force_lookup
|
||||||
|
|
||||||
if (!g_dsym_for_uuid_exe_exists)
|
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();
|
g_dsym_for_uuid_exe_exists = dsym_for_uuid_exe_spec.Exists();
|
||||||
if (!g_dsym_for_uuid_exe_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();
|
g_dsym_for_uuid_exe_exists = dsym_for_uuid_exe_spec.Exists();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
if (!g_dsym_for_uuid_exe_exists && g_dbgshell_command != NULL)
|
if (!g_dsym_for_uuid_exe_exists && g_dbgshell_command != NULL)
|
||||||
{
|
{
|
||||||
dsym_for_uuid_exe_spec.SetFile(g_dbgshell_command, true);
|
dsym_for_uuid_exe_spec.SetFile(g_dbgshell_command, true);
|
||||||
|
|
Loading…
Reference in New Issue