From 9a41c7c176aa571f5270747f690e9b4a37e27529 Mon Sep 17 00:00:00 2001 From: "Kartik K. Agaram" Date: Sun, 11 Sep 2022 08:31:05 -0700 Subject: [PATCH] more correct absolute path detection --- file.lua | 17 +++++++++++++++++ run.lua | 5 ++--- source.lua | 5 ++--- 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