Skip to content

Commit

Permalink
fix(pl.path): make expanduser more sturdy
Browse files Browse the repository at this point in the history
  • Loading branch information
Tieske committed Apr 2, 2024
1 parent 675a0c2 commit 4e6e936
Showing 1 changed file with 25 additions and 7 deletions.
32 changes: 25 additions & 7 deletions lua/pl/path.lua
Original file line number Diff line number Diff line change
Expand Up @@ -493,17 +493,35 @@ end
-- In windows, if HOME isn't set, then USERPROFILE is used in preference to
-- HOMEDRIVE HOMEPATH. This is guaranteed to be writeable on all versions of Windows.
-- @string P A file path
-- @treturn[1] string The file path with the `~` prefix substituted, or the input path if it had no prefix.
-- @treturn[2] nil
-- @treturn[2] string Error message if the environment variables were unavailable.
function path.expanduser(P)
assert_string(1,P)
if at(P,1) == '~' then
local home = getenv('HOME')
if not home then -- has to be Windows
home = getenv 'USERPROFILE' or (getenv 'HOMEDRIVE' .. getenv 'HOMEPATH')
end
return home..sub(P,2)
else
if P:sub(1,1) ~= '~' then
return P
end

local home = getenv('HOME')
if (not home) and (not path.is_windows) then
-- no more options to try on Nix
return nil, "failed to expand '~' (HOME not set)"
end

if (not home) then
-- try alternatives on Windows
home = getenv 'USERPROFILE'
if not home then
local hd = getenv 'HOMEDRIVE'
local hp = getenv 'HOMEPATH'
if not (hd and hp) then
return nil, "failed to expand '~' (HOME, USERPROFILE, and HOMEDRIVE and/or HOMEPATH not set)"
end
home = hd..hp
end
end

return home..sub(P,2)
end


Expand Down

0 comments on commit 4e6e936

Please sign in to comment.