Browse Source

Fix newFileData and newThread outputting deprecation warnings.

Fixes #1811.
Alex Szpakowski 3 years ago
parent
commit
07f087c139
1 changed files with 26 additions and 30 deletions
  1. 26 30
      src/modules/filesystem/wrap_Filesystem.cpp

+ 26 - 30
src/modules/filesystem/wrap_Filesystem.cpp

@@ -305,7 +305,7 @@ File *luax_getfile(lua_State *L, int idx)
 	return file;
 	return file;
 }
 }
 
 
-FileData *luax_getfiledata(lua_State *L, int idx)
+FileData *luax_getfiledata(lua_State *L, int idx, bool ioerror)
 {
 {
 	FileData *data = nullptr;
 	FileData *data = nullptr;
 	File *file = nullptr;
 	File *file = nullptr;
@@ -325,18 +325,33 @@ FileData *luax_getfiledata(lua_State *L, int idx)
 		luaL_argerror(L, idx, "filename, File, or FileData expected");
 		luaL_argerror(L, idx, "filename, File, or FileData expected");
 		return nullptr; // Never reached.
 		return nullptr; // Never reached.
 	}
 	}
-
-	if (file)
+	else if (file && !data)
 	{
 	{
-		luax_catchexcept(L,
-			[&]() { data = file->read(); },
-			[&](bool) { file->release(); }
-		);
+		try
+		{
+			data = file->read();
+		}
+		catch (love::Exception &e)
+		{
+			file->release();
+			if (ioerror)
+				luax_ioError(L, "%s", e.what());
+			else
+				luaL_error(L, "%s", e.what());
+			return nullptr; // Never reached.
+		}
+
+		file->release();
 	}
 	}
 
 
 	return data;
 	return data;
 }
 }
 
 
+FileData *luax_getfiledata(lua_State *L, int idx)
+{
+	return luax_getfiledata(L, idx, false);
+}
+
 Data *luax_getdata(lua_State *L, int idx)
 Data *luax_getdata(lua_State *L, int idx)
 {
 {
 	Data *data = nullptr;
 	Data *data = nullptr;
@@ -389,29 +404,10 @@ int w_newFileData(lua_State *L)
 	// Single argument: treat as filepath or File.
 	// Single argument: treat as filepath or File.
 	if (lua_gettop(L) == 1)
 	if (lua_gettop(L) == 1)
 	{
 	{
-		// We don't use luax_getfiledata because we want to use an ioError.
-		if (lua_isstring(L, 1))
-			luax_convobj(L, 1, "filesystem", "newFile");
-
-		// Get FileData from the File.
-		if (luax_istype(L, 1, File::type))
-		{
-			File *file = luax_checkfile(L, 1);
-
-			StrongRef<FileData> data;
-			try
-			{
-				data.set(file->read(), Acquire::NORETAIN);
-			}
-			catch (love::Exception &e)
-			{
-				return luax_ioError(L, "%s", e.what());
-			}
-			luax_pushtype(L, data);
-			return 1;
-		}
-		else
-			return luaL_argerror(L, 1, "filename or File expected");
+		FileData *data = luax_getfiledata(L, 1, true);
+		luax_pushtype(L, data);
+		data->release();
+		return 1;
 	}
 	}
 
 
 	size_t length = 0;
 	size_t length = 0;