Graphical Remote Lua Debugger, a debugger for the lua programming language.
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 

70 lines
1.7 KiB

-- see copyright notice in grldc.h
local string = string
local assert = assert
local print = print
module( "grldc.utilities" )
function normalizePath( path, base )
--print( "Normalizing "..path )
assert( string.sub( path, 1, 1 ) ~= "@" )
local n
path = string.gsub(path, "\\", "/")
path = string.lower( path )
--make sure the drive letter, if any, is upper case
if string.find(path, "^.:/") == 1 then
path = string.upper(string.sub(path, 1, 1))..string.sub(path, 2)
elseif string.sub( path, 1, 1 ) == "/" then
-- absolute linux-style path, nothing to do
elseif string.sub( path, 1, 2 ) == "./" then
-- explicit relative path, nothing to do
else
path = "./"..path
end
if string.sub( path, 1, 2 ) == "./" and base ~= nil then
-- if the lfs module is available, we convert relative path to absolute
path = base..string.sub( path, 2 )
path = string.gsub(path, "\\", "/")
end
--add end "/" if needed (simplifies pattern matchings below)
if string.sub(path, -1) ~= "/" then
path = path.."/"
end
--replace "//" by "/"
n = 1
while n > 0 do
path, n = string.gsub(path, "//", "/", 1)
end
--replace "/./" by "/"
n = 1
while n > 0 do
path, n = string.gsub(path, "/%./", "/", 1)
end
--replace "/something/../" by "/"
n = 1
while n > 0 do
n = 0
local s = 0, e
local something = ".."
while something == ".." do
s, e, something = string.find( path, "/([^/]*)/%.%./", s+1 )
end
if s ~= nil then
n = 1
path = string.sub( path, 1, s-1 ).."/"..string.sub( path, e+1 )
end
end
path = string.sub( path, 1, -2 ) -- remove end "/"
--print( path )
return path
end