<div dir="ltr">Hello<div>I think your Windows and Unix implementation have different behavior.</div><div>On Windows it will set the parameter to the returned path, but on Unix I think it will append it.</div><div><br></div>
<div>Greetings</div><div>-- Marius</div></div><div class="gmail_extra"><br><br><div class="gmail_quote">On Sun, Nov 17, 2013 at 12:53 PM, David Majnemer <span dir="ltr"><<a href="mailto:david.majnemer@gmail.com" target="_blank">david.majnemer@gmail.com</a>></span> wrote:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><br>
<br>
================<br>
Comment at: lib/Support/Unix/Path.inc:805<br>
@@ +804,3 @@<br>
<div class="im">+<br>
+  return false;<br>
+}<br>
</div>----------------<br>
Have you considered falling back to `getpwuid_r` on SUSv3? Something like:<br>
  bufsize = 2048;<br>
<br>
  #ifdef _SC_GETPW_R_SIZE_MAX<br>
  if ((getpw_r_size_max = sysconf(_SC_GETPW_R_SIZE_MAX)) > 0)<br>
    bufsize = (size_t)getpw_r_size_max;<br>
  #endif<br>
<br>
  uid = getuid();<br>
<br>
  buf = NULL;<br>
  do {<br>
    if ((tbuf = realloc(buf, bufsize)) == NULL) {<br>
      free(buf);<br>
      return false;<br>
    }<br>
    buf = tbuf;<br>
    err = getpwuid_r(uid, &pw, buf, bufsize, &tpw);<br>
    bufsize *= 2;<br>
  } while (err == ERANGE);<br>
<br>
  if (err) {<br>
    free(buf);<br>
    return false;<br>
  }<br>
<br>
  if (!tpw || !pw.pw_dir)<br>
    return false;<br>
<br>
  result.append(pw.pw_dir, pw.pw_dir + strlen(pw.pw_dir));<br>
  return true;<br>
<br>
<br>
<a href="http://llvm-reviews.chandlerc.com/D2199" target="_blank">http://llvm-reviews.chandlerc.com/D2199</a><br>
_______________________________________________<br>
llvm-commits mailing list<br>
<a href="mailto:llvm-commits@cs.uiuc.edu">llvm-commits@cs.uiuc.edu</a><br>
<a href="http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits" target="_blank">http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits</a><br>
</blockquote></div><br></div>