<div dir="ltr">Pushed in 298514.  Feel free to let me know if there is still something else I can do to make it better.</div><br><div class="gmail_quote"><div dir="ltr">On Wed, Mar 22, 2017 at 9:25 AM Zachary Turner <<a href="mailto:zturner@google.com">zturner@google.com</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr" class="gmail_msg">It's a reasonable concern, I'll fix up the test accordingly and push an update shortly.</div><br class="gmail_msg"><div class="gmail_quote gmail_msg"><div dir="ltr" class="gmail_msg">On Wed, Mar 22, 2017 at 9:20 AM Stephan Bergmann <<a href="mailto:sbergman@redhat.com" class="gmail_msg" target="_blank">sbergman@redhat.com</a>> wrote:<br class="gmail_msg"></div><blockquote class="gmail_quote gmail_msg" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">On 03/22/2017 05:12 PM, Zachary Turner wrote:<br class="gmail_msg">
> I wasn't aware people do this.  If that's the case, then perhaps I could<br class="gmail_msg">
> simply change the test to get the value from the password database<br class="gmail_msg">
> inside the test, then unset HOME, then confirm that it returns the same<br class="gmail_msg">
> thing that it says in the password database?<br class="gmail_msg">
><br class="gmail_msg">
> It sounds like you don't disagree with the functionality change in<br class="gmail_msg">
> home_directory(), but just the way the test is implemented, right?<br class="gmail_msg">
<br class="gmail_msg">
Right.  (And I myself don't routinely build with such a distorted<br class="gmail_msg">
environment, just wondered whether this is a breaking point waiting to<br class="gmail_msg">
happen eventually.)<br class="gmail_msg">
<br class="gmail_msg">
> On Wed, Mar 22, 2017 at 9:02 AM Stephan Bergmann <<a href="mailto:sbergman@redhat.com" class="gmail_msg" target="_blank">sbergman@redhat.com</a><br class="gmail_msg">
> <mailto:<a href="mailto:sbergman@redhat.com" class="gmail_msg" target="_blank">sbergman@redhat.com</a>>> wrote:<br class="gmail_msg">
><br class="gmail_msg">
>     On 03/22/2017 04:24 PM, Zachary Turner via llvm-commits wrote:<br class="gmail_msg">
>     > Author: zturner<br class="gmail_msg">
>     > Date: Wed Mar 22 10:24:59 2017<br class="gmail_msg">
>     > New Revision: 298513<br class="gmail_msg">
>     ><br class="gmail_msg">
>     > URL: <a href="http://llvm.org/viewvc/llvm-project?rev=298513&view=rev" rel="noreferrer" class="gmail_msg" target="_blank">http://llvm.org/viewvc/llvm-project?rev=298513&view=rev</a><br class="gmail_msg">
>     > Log:<br class="gmail_msg">
>     > Make home_directory look in the password database in addition to<br class="gmail_msg">
>     $HOME.<br class="gmail_msg">
>     ><br class="gmail_msg">
>     > This is something of an edge case, but when the $HOME environment<br class="gmail_msg">
>     > variable is not set, we can still look in the password database<br class="gmail_msg">
>     > to get the current user's home directory.<br class="gmail_msg">
>     ><br class="gmail_msg">
>     > Added a test for this by getting the value of $HOME, then unsetting<br class="gmail_msg">
>     > it, then calling home_directory() and verifying that it succeeds<br class="gmail_msg">
>     > and that the value is the same as what we originally read from<br class="gmail_msg">
>     > the environment.<br class="gmail_msg">
><br class="gmail_msg">
>     Why should builds not be supported which are done in an environment<br class="gmail_msg">
>     where HOME deliberately points somewhere other than the user's home<br class="gmail_msg">
>     directory?<br class="gmail_msg">
><br class="gmail_msg">
>     > Modified:<br class="gmail_msg">
>     >     llvm/trunk/lib/Support/Unix/Path.inc<br class="gmail_msg">
>     >     llvm/trunk/unittests/Support/Path.cpp<br class="gmail_msg">
>     ><br class="gmail_msg">
>     > Modified: llvm/trunk/lib/Support/Unix/Path.inc<br class="gmail_msg">
>     > URL:<br class="gmail_msg">
>     <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Support/Unix/Path.inc?rev=298513&r1=298512&r2=298513&view=diff" rel="noreferrer" class="gmail_msg" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Support/Unix/Path.inc?rev=298513&r1=298512&r2=298513&view=diff</a><br class="gmail_msg">
>     ><br class="gmail_msg">
>     ==============================================================================<br class="gmail_msg">
>     > --- llvm/trunk/lib/Support/Unix/Path.inc (original)<br class="gmail_msg">
>     > +++ llvm/trunk/lib/Support/Unix/Path.inc Wed Mar 22 10:24:59 2017<br class="gmail_msg">
>     > @@ -920,12 +920,18 @@ std::error_code real_path(const Twine &p<br class="gmail_msg">
>     >  namespace path {<br class="gmail_msg">
>     ><br class="gmail_msg">
>     >  bool home_directory(SmallVectorImpl<char> &result) {<br class="gmail_msg">
>     > -  if (char *RequestedDir = getenv("HOME")) {<br class="gmail_msg">
>     > -    result.clear();<br class="gmail_msg">
>     > -    result.append(RequestedDir, RequestedDir + strlen(RequestedDir));<br class="gmail_msg">
>     > -    return true;<br class="gmail_msg">
>     > +  char *RequestedDir = getenv("HOME");<br class="gmail_msg">
>     > +  if (!RequestedDir) {<br class="gmail_msg">
>     > +    struct passwd *pw = getpwuid(getuid());<br class="gmail_msg">
>     > +    if (pw && pw->pw_dir)<br class="gmail_msg">
>     > +      RequestedDir = pw->pw_dir;<br class="gmail_msg">
>     >    }<br class="gmail_msg">
>     > -  return false;<br class="gmail_msg">
>     > +  if (!RequestedDir)<br class="gmail_msg">
>     > +    return false;<br class="gmail_msg">
>     > +<br class="gmail_msg">
>     > +  result.clear();<br class="gmail_msg">
>     > +  result.append(RequestedDir, RequestedDir + strlen(RequestedDir));<br class="gmail_msg">
>     > +  return true;<br class="gmail_msg">
>     >  }<br class="gmail_msg">
>     ><br class="gmail_msg">
>     >  static bool getDarwinConfDir(bool TempDir, SmallVectorImpl<char><br class="gmail_msg">
>     &Result) {<br class="gmail_msg">
>     ><br class="gmail_msg">
>     > Modified: llvm/trunk/unittests/Support/Path.cpp<br class="gmail_msg">
>     > URL:<br class="gmail_msg">
>     <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/unittests/Support/Path.cpp?rev=298513&r1=298512&r2=298513&view=diff" rel="noreferrer" class="gmail_msg" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/unittests/Support/Path.cpp?rev=298513&r1=298512&r2=298513&view=diff</a><br class="gmail_msg">
>     ><br class="gmail_msg">
>     ==============================================================================<br class="gmail_msg">
>     > --- llvm/trunk/unittests/Support/Path.cpp (original)<br class="gmail_msg">
>     > +++ llvm/trunk/unittests/Support/Path.cpp Wed Mar 22 10:24:59 2017<br class="gmail_msg">
>     > @@ -328,6 +328,26 @@ TEST(Support, HomeDirectory) {<br class="gmail_msg">
>     >    }<br class="gmail_msg">
>     >  }<br class="gmail_msg">
>     ><br class="gmail_msg">
>     > +#ifndef LLVM_ON_WIN32<br class="gmail_msg">
>     > +TEST(Support, HomeDirectoryWithNoEnv) {<br class="gmail_msg">
>     > +  std::string Original;<br class="gmail_msg">
>     > +  char const *path = ::getenv("HOME");<br class="gmail_msg">
>     > +  // Don't try to test if we don't have something to compare against.<br class="gmail_msg">
>     > +  if (!path)<br class="gmail_msg">
>     > +    return;<br class="gmail_msg">
>     > +  Original = path;<br class="gmail_msg">
>     > +  ::unsetenv("HOME");<br class="gmail_msg">
>     > +<br class="gmail_msg">
>     > +  SmallString<128> HomeDir;<br class="gmail_msg">
>     > +  auto status = path::home_directory(HomeDir);<br class="gmail_msg">
>     > +  EXPECT_TRUE(status);<br class="gmail_msg">
>     > +  EXPECT_EQ(Original, HomeDir);<br class="gmail_msg">
>     > +<br class="gmail_msg">
>     > +  // Now put the original environment variable back<br class="gmail_msg">
>     > +  ::setenv("HOME", Original.c_str(), 1);<br class="gmail_msg">
>     > +}<br class="gmail_msg">
>     > +#endif<br class="gmail_msg">
>     > +<br class="gmail_msg">
>     >  TEST(Support, UserCacheDirectory) {<br class="gmail_msg">
>     >    SmallString<13> CacheDir;<br class="gmail_msg">
>     >    SmallString<20> CacheDir2;<br class="gmail_msg">
<br class="gmail_msg">
</blockquote></div></blockquote></div>