diff options
author | David Adam <zanchey@ucc.gu.uwa.edu.au> | 2014-10-25 13:58:52 +0800 |
---|---|---|
committer | David Adam <zanchey@ucc.gu.uwa.edu.au> | 2014-10-26 08:50:28 +0800 |
commit | ab7af98dede422fbaf3b691e4c44e1e76e2fb18c (patch) | |
tree | 655d80e7f1c509197e5cfaf26fe25c32b3be974b | |
parent | b0e09303a6c9d49d917e811edb247dbacd23907e (diff) |
expand: expand tilde to canonical paths
Work on #1133.
-rw-r--r-- | expand.cpp | 12 | ||||
-rw-r--r-- | tests/expansion.in | 12 |
2 files changed, 21 insertions, 3 deletions
@@ -1633,7 +1633,6 @@ static void expand_home_directory(wcstring &input) if (userinfo == NULL) { tilde_error = true; - input[0] = L'~'; } else { @@ -1641,10 +1640,17 @@ static void expand_home_directory(wcstring &input) } } - if (! tilde_error) + wchar_t *realhome; + realhome = wrealpath(home, NULL); + + if (! tilde_error && realhome) { - input.replace(input.begin(), input.begin() + tail_idx, home); + input.replace(input.begin(), input.begin() + tail_idx, realhome); } + else + { + input[0] = L'~'; + } } } diff --git a/tests/expansion.in b/tests/expansion.in index a2225127..34662d48 100644 --- a/tests/expansion.in +++ b/tests/expansion.in @@ -80,3 +80,15 @@ echo $foo[d] echo ()[1] echo ()[d] + +# Test tilde expansion +set tmpdir (mktemp -d) +mkdir $tmpdir/realhome +ln -s $tmpdir/realhome $tmpdir/linkhome +set expandedtilde (env HOME=$tmpdir/linkhome ../fish -c 'echo ~') +if test $expandedtilde != $tmpdir/realhome + echo '~ expands to' $expandedtilde ' - expected ' $tmpdir/realhome +end +unlink $tmpdir/linkhome +rmdir $tmpdir/realhome +rmdir $tmpdir |