Fix tilde expansion algorithm
In principle correct, in practice completely broken. I wrongly assumed basic_string::find() would behave like strcspn(), and also used a nonsensical string index to check for the tilde.
This commit is contained in:
parent
b99f96cf6a
commit
98c8dc5b7d
4
sdn.cpp
4
sdn.cpp
|
@ -120,11 +120,11 @@ fun untilde (const string &path) -> string {
|
|||
string tail = path.substr (1);
|
||||
if (path[0] == '\\')
|
||||
return tail;
|
||||
if (path[1] != '~')
|
||||
if (path[0] != '~')
|
||||
return path;
|
||||
|
||||
// If there is something between the ~ and the first / (or the EOS)
|
||||
if (size_t until_slash = tail.find ('/')) {
|
||||
if (size_t until_slash = strcspn (tail.c_str (), "/")) {
|
||||
if (const auto *pw = getpwnam (tail.substr (0, until_slash).c_str ()))
|
||||
return pw->pw_dir + tail.substr (until_slash);
|
||||
} else if (const auto *home = getenv ("HOME")) {
|
||||
|
|
Loading…
Reference in New Issue