about summary refs log tree commit diff stats
diff options
context:
space:
mode:
-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 98311da..12bd5a1 100644
--- a/file.lua
+++ b/file.lua
@@ -58,3 +58,20 @@ function load_array(a)
   end
   return result
 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 16857f9..e395978 100644
--- a/run.lua
+++ b/run.lua
@@ -136,9 +136,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 f4527ca..843a244 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