- Fixed bug #1194, so that $HOME has precedence over the passwd db when looking
  for the user's home directory (thanks to Jakub Wilk).
This commit is contained in:
Paul Beckingham 2013-03-09 17:36:48 -05:00
parent a790cce6f6
commit 82bd13bc7a
2 changed files with 11 additions and 5 deletions

View file

@ -95,6 +95,8 @@ Bugs
narrow characters (thanks to Roy Zuo).
+ Fixed bug #1191, which kept file locks active for longer than necessary,
and caused the 'execute' command to be considered a 'write' command.
+ Fixed bug #1194, so that $HOME has precedence over the passwd db when looking
for the user's home directory (thanks to Jakub Wilk).
+ Improved hyphenation by splitting on commas (even if no whitespace after).
Leads to better output of, for example, 'task show', where comma-separated
lists are common.

View file

@ -31,6 +31,7 @@
#include <glob.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <stdlib.h>
#include <pwd.h>
#include <stdio.h>
#include <unistd.h>
@ -206,20 +207,23 @@ std::string Path::expand (const std::string& in)
std::string::size_type slash;
if (tilde != std::string::npos)
{
const char *home = getenv("HOME");
if (home == NULL)
{
struct passwd* pw = getpwuid (getuid ());
home = pw->pw_dir;
}
// Convert: ~ --> /home/user
if (copy.length () == 1)
{
copy = pw->pw_dir;
}
copy = home;
// Convert: ~/x --> /home/user/x
else if (copy.length () > tilde + 1 &&
copy[tilde + 1] == '/')
{
copy.replace (tilde, 1, pw->pw_dir);
copy.replace (tilde, 1, home);
}
// Convert: ~foo/x --> /home/foo/x