about summary refs log tree commit diff stats
diff options
context:
space:
mode:
authorKartik K. Agaram <vc@akkartik.com>2022-09-11 08:31:05 -0700
committerKartik K. Agaram <vc@akkartik.com>2022-09-11 08:31:05 -0700
commit9a41c7c176aa571f5270747f690e9b4a37e27529 (patch)
tree95845ced9267487cbe536abe797b6af0e2c45319
parent511db8cffd808d244aa84095bcde83def48736e0 (diff)
downloadlines.love-9a41c7c176aa571f5270747f690e9b4a37e27529.tar.gz
more correct absolute path detection
-rw-r--r--file.lua17
-rw-r--r--run.lua5
-rw-r--r--source.lua5
-rw-r--r--source_file.lua17
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