diff options
author | Kartik K. Agaram <vc@akkartik.com> | 2022-09-11 08:31:05 -0700 |
---|---|---|
committer | Kartik K. Agaram <vc@akkartik.com> | 2022-09-11 08:31:05 -0700 |
commit | 9a41c7c176aa571f5270747f690e9b4a37e27529 (patch) | |
tree | 95845ced9267487cbe536abe797b6af0e2c45319 | |
parent | 511db8cffd808d244aa84095bcde83def48736e0 (diff) | |
download | text.love-9a41c7c176aa571f5270747f690e9b4a37e27529.tar.gz |
more correct absolute path detection
-rw-r--r-- | file.lua | 17 | ||||
-rw-r--r-- | run.lua | 5 | ||||
-rw-r--r-- | source.lua | 5 | ||||
-rw-r--r-- | source_file.lua | 17 |
4 files changed, 38 insertions, 6 deletions
diff --git a/file.lua b/file.lua index 6c460a9..72c114a 100644 --- a/file.lua +++ b/file.lua @@ -180,3 +180,20 @@ function load_drawing_from_array(iter, a, i) end return i, drawing end + +function is_absolute_path(path) + local os_path_separator = package.config:sub(1,1) + if os_path_separator == '/' then + -- POSIX systems permit backslashes in filenames + return path:sub(1,1) == '/' + elseif os_path_separator == '\\' then + local f = path:sub(1,1) + return f == '/' or f == '\\' + else + error('What OS is this? LÖVE reports that the path separator is "'..os_path_separator..'"') + end +end + +function is_relative_path(path) + return not is_absolute_path(path) +end diff --git a/run.lua b/run.lua index 188269b..2dd159e 100644 --- a/run.lua +++ b/run.lua @@ -141,9 +141,8 @@ function run.settings() Settings.x, Settings.y, Settings.displayindex = love.window.getPosition() end local filename = Editor_state.filename - local os_path_separator = package.config:sub(1,1) - if filename:sub(1,1) ~= os_path_separator then - filename = love.filesystem.getWorkingDirectory()..os_path_separator..filename + if is_relative_path(filename) then + filename = love.filesystem.getWorkingDirectory()..'/'..filename -- '/' should work even on Windows end return { x=Settings.x, y=Settings.y, displayindex=Settings.displayindex, diff --git a/source.lua b/source.lua index fc2ff3c..1da4467 100644 --- a/source.lua +++ b/source.lua @@ -257,9 +257,8 @@ function source.settings() Settings.source.x, Settings.source.y, Settings.source.displayindex = love.window.getPosition() end local filename = Editor_state.filename - local os_path_separator = package.config:sub(1,1) - if filename:sub(1,1) ~= os_path_separator then - filename = love.filesystem.getWorkingDirectory()..os_path_separator..filename + if is_relative_path(filename) then + filename = love.filesystem.getWorkingDirectory()..'/'..filename -- '/' should work even on Windows end --? print('saving source settings', Settings.source.x, Settings.source.y, Settings.source.displayindex) return { diff --git a/source_file.lua b/source_file.lua index 6552667..8dd8832 100644 --- a/source_file.lua +++ b/source_file.lua @@ -199,3 +199,20 @@ function load_drawing_from_array(iter, a, i) end return i, drawing end + +function is_absolute_path(path) + local os_path_separator = package.config:sub(1,1) + if os_path_separator == '/' then + -- POSIX systems permit backslashes in filenames + return path:sub(1,1) == '/' + elseif os_path_separator == '\\' then + local f = path:sub(1,1) + return f == '/' or f == '\\' + else + error('What OS is this? LÖVE reports that the path separator is "'..os_path_separator..'"') + end +end + +function is_relative_path(path) + return not is_absolute_path(path) +end |