|
@@ -1,14 +1,14 @@
|
|
/**
|
|
/**
|
|
* Copyright (c) 2006-2009 LOVE Development Team
|
|
* Copyright (c) 2006-2009 LOVE Development Team
|
|
-*
|
|
|
|
|
|
+*
|
|
* This software is provided 'as-is', without any express or implied
|
|
* This software is provided 'as-is', without any express or implied
|
|
* warranty. In no event will the authors be held liable for any damages
|
|
* warranty. In no event will the authors be held liable for any damages
|
|
* arising from the use of this software.
|
|
* arising from the use of this software.
|
|
-*
|
|
|
|
|
|
+*
|
|
* Permission is granted to anyone to use this software for any purpose,
|
|
* Permission is granted to anyone to use this software for any purpose,
|
|
* including commercial applications, and to alter it and redistribute it
|
|
* including commercial applications, and to alter it and redistribute it
|
|
* freely, subject to the following restrictions:
|
|
* freely, subject to the following restrictions:
|
|
-*
|
|
|
|
|
|
+*
|
|
* 1. The origin of this software must not be misrepresented; you must not
|
|
* 1. The origin of this software must not be misrepresented; you must not
|
|
* claim that you wrote the original software. If you use this software
|
|
* claim that you wrote the original software. If you use this software
|
|
* in a product, an acknowledgment in the product documentation would be
|
|
* in a product, an acknowledgment in the product documentation would be
|
|
@@ -81,7 +81,7 @@ namespace physfs
|
|
|
|
|
|
// Try to add the save directory to the search path.
|
|
// Try to add the save directory to the search path.
|
|
// (No error on fail, it means that the path doesn't exist).
|
|
// (No error on fail, it means that the path doesn't exist).
|
|
- PHYSFS_addToSearchPath(save_path_full.c_str(), 1);
|
|
|
|
|
|
+ PHYSFS_addToSearchPath(save_path_full.c_str(), 0);
|
|
|
|
|
|
return true;
|
|
return true;
|
|
}
|
|
}
|
|
@@ -96,7 +96,7 @@ namespace physfs
|
|
return false;
|
|
return false;
|
|
|
|
|
|
// Add the directory.
|
|
// Add the directory.
|
|
- if(!PHYSFS_addToSearchPath(source, 0))
|
|
|
|
|
|
+ if(!PHYSFS_addToSearchPath(source, 1))
|
|
return false;
|
|
return false;
|
|
|
|
|
|
// Save the game source.
|
|
// Save the game source.
|
|
@@ -121,17 +121,17 @@ namespace physfs
|
|
|
|
|
|
// Create the save folder. (We're now "at" %APPDATA%).
|
|
// Create the save folder. (We're now "at" %APPDATA%).
|
|
if(!mkdir(save_path_relative.c_str()))
|
|
if(!mkdir(save_path_relative.c_str()))
|
|
- {
|
|
|
|
|
|
+ {
|
|
PHYSFS_setWriteDir(0); // Clear the write directory in case of error.
|
|
PHYSFS_setWriteDir(0); // Clear the write directory in case of error.
|
|
return false;
|
|
return false;
|
|
- }
|
|
|
|
|
|
+ }
|
|
|
|
|
|
// Set the final write directory.
|
|
// Set the final write directory.
|
|
if(!PHYSFS_setWriteDir(save_path_full.c_str()))
|
|
if(!PHYSFS_setWriteDir(save_path_full.c_str()))
|
|
return false;
|
|
return false;
|
|
|
|
|
|
- // Add the directory. (Well not be readded if already present).
|
|
|
|
- if(!PHYSFS_addToSearchPath(save_path_full.c_str(), 1))
|
|
|
|
|
|
+ // Add the directory. (Will not be readded if already present).
|
|
|
|
+ if(!PHYSFS_addToSearchPath(save_path_full.c_str(), 0))
|
|
{
|
|
{
|
|
PHYSFS_setWriteDir(0); // Clear the write directory in case of error.
|
|
PHYSFS_setWriteDir(0); // Clear the write directory in case of error.
|
|
return false;
|
|
return false;
|
|
@@ -139,7 +139,7 @@ namespace physfs
|
|
|
|
|
|
return true;
|
|
return true;
|
|
}
|
|
}
|
|
-
|
|
|
|
|
|
+
|
|
File * Filesystem::newFile(const char *filename)
|
|
File * Filesystem::newFile(const char *filename)
|
|
{
|
|
{
|
|
return new File(filename);
|
|
return new File(filename);
|
|
@@ -213,7 +213,7 @@ namespace physfs
|
|
bool Filesystem::mkdir(const char * file)
|
|
bool Filesystem::mkdir(const char * file)
|
|
{
|
|
{
|
|
if(PHYSFS_getWriteDir() == 0 && !setupWriteDirectory())
|
|
if(PHYSFS_getWriteDir() == 0 && !setupWriteDirectory())
|
|
- return false;
|
|
|
|
|
|
+ return false;
|
|
|
|
|
|
if(!PHYSFS_mkdir(file))
|
|
if(!PHYSFS_mkdir(file))
|
|
return false;
|
|
return false;
|
|
@@ -223,7 +223,7 @@ namespace physfs
|
|
bool Filesystem::remove(const char * file)
|
|
bool Filesystem::remove(const char * file)
|
|
{
|
|
{
|
|
if(PHYSFS_getWriteDir() == 0 && !setupWriteDirectory())
|
|
if(PHYSFS_getWriteDir() == 0 && !setupWriteDirectory())
|
|
- return false;
|
|
|
|
|
|
+ return false;
|
|
|
|
|
|
if(!PHYSFS_delete(file))
|
|
if(!PHYSFS_delete(file))
|
|
return false;
|
|
return false;
|
|
@@ -235,7 +235,7 @@ namespace physfs
|
|
// The file to read from. The file must either be created
|
|
// The file to read from. The file must either be created
|
|
// on-the-fly, or passed as a parameter.
|
|
// on-the-fly, or passed as a parameter.
|
|
File * file;
|
|
File * file;
|
|
-
|
|
|
|
|
|
+
|
|
if(lua_isstring(L, 1))
|
|
if(lua_isstring(L, 1))
|
|
{
|
|
{
|
|
// Create the file.
|
|
// Create the file.
|
|
@@ -255,7 +255,7 @@ namespace physfs
|
|
if(data == 0)
|
|
if(data == 0)
|
|
return luaL_error(L, "File could not be read.");
|
|
return luaL_error(L, "File could not be read.");
|
|
|
|
|
|
- // Close and delete the file, if we created it.
|
|
|
|
|
|
+ // Close and delete the file, if we created it.
|
|
// (I.e. if the first parameter is a string).
|
|
// (I.e. if the first parameter is a string).
|
|
if(lua_isstring(L, 1))
|
|
if(lua_isstring(L, 1))
|
|
file->release();
|
|
file->release();
|
|
@@ -265,7 +265,7 @@ namespace physfs
|
|
|
|
|
|
// Push the size.
|
|
// Push the size.
|
|
lua_pushinteger(L, data->getSize());
|
|
lua_pushinteger(L, data->getSize());
|
|
-
|
|
|
|
|
|
+
|
|
// Lua has a copy now, so we can free it.
|
|
// Lua has a copy now, so we can free it.
|
|
data->release();
|
|
data->release();
|
|
|
|
|
|
@@ -277,8 +277,8 @@ namespace physfs
|
|
// The file to write to. The file must either be created
|
|
// The file to write to. The file must either be created
|
|
// on-the-fly, or passed as a parameter.
|
|
// on-the-fly, or passed as a parameter.
|
|
File * file;
|
|
File * file;
|
|
-
|
|
|
|
- // We know for sure that we need a second parameter, so
|
|
|
|
|
|
+
|
|
|
|
+ // We know for sure that we need a second parameter, so
|
|
// let's check that first.
|
|
// let's check that first.
|
|
if(lua_isnoneornil(L, 2))
|
|
if(lua_isnoneornil(L, 2))
|
|
return luaL_error(L, "Second argument needed.");
|
|
return luaL_error(L, "Second argument needed.");
|
|
@@ -323,7 +323,7 @@ namespace physfs
|
|
// Write the data.
|
|
// Write the data.
|
|
bool success = file->write(input, length);
|
|
bool success = file->write(input, length);
|
|
|
|
|
|
- // Close and delete the file, if we created
|
|
|
|
|
|
+ // Close and delete the file, if we created
|
|
// it in this function.
|
|
// it in this function.
|
|
if(lua_isstring(L, 1))
|
|
if(lua_isstring(L, 1))
|
|
{
|
|
{
|
|
@@ -349,7 +349,7 @@ namespace physfs
|
|
int type = lua_type(L, 1);
|
|
int type = lua_type(L, 1);
|
|
|
|
|
|
if(type != LUA_TSTRING)
|
|
if(type != LUA_TSTRING)
|
|
- return luaL_error(L, "Function requires parameter of type string.");
|
|
|
|
|
|
+ return luaL_error(L, "Function requires parameter of type string.");
|
|
|
|
|
|
const char * dir = lua_tostring(L, 1);
|
|
const char * dir = lua_tostring(L, 1);
|
|
char **rc = PHYSFS_enumerateFiles(dir);
|
|
char **rc = PHYSFS_enumerateFiles(dir);
|
|
@@ -365,7 +365,7 @@ namespace physfs
|
|
lua_settable(L, -3);
|
|
lua_settable(L, -3);
|
|
index++;
|
|
index++;
|
|
}
|
|
}
|
|
-
|
|
|
|
|
|
+
|
|
PHYSFS_freeList(rc);
|
|
PHYSFS_freeList(rc);
|
|
|
|
|
|
return 1;
|
|
return 1;
|
|
@@ -379,9 +379,9 @@ namespace physfs
|
|
{
|
|
{
|
|
file = newFile(lua_tostring(L, 1));
|
|
file = newFile(lua_tostring(L, 1));
|
|
if(!file->open(File::READ))
|
|
if(!file->open(File::READ))
|
|
- return luaL_error(L, "Could not open file %s.\n", lua_tostring(L, 1));
|
|
|
|
|
|
+ return luaL_error(L, "Could not open file %s.\n", lua_tostring(L, 1));
|
|
lua_pop(L, 1);
|
|
lua_pop(L, 1);
|
|
-
|
|
|
|
|
|
+
|
|
luax_newtype(L, "File", FILESYSTEM_FILE_T, file, false);
|
|
luax_newtype(L, "File", FILESYSTEM_FILE_T, file, false);
|
|
lua_pushboolean(L, 1); // 1 = autoclose.
|
|
lua_pushboolean(L, 1); // 1 = autoclose.
|
|
}
|
|
}
|
|
@@ -428,7 +428,7 @@ namespace physfs
|
|
break;
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
-
|
|
|
|
|
|
+
|
|
if(newline > 0)
|
|
if(newline > 0)
|
|
break;
|
|
break;
|
|
}
|
|
}
|
|
@@ -447,13 +447,13 @@ namespace physfs
|
|
char * str = new char[linesize];
|
|
char * str = new char[linesize];
|
|
|
|
|
|
// Read it.
|
|
// Read it.
|
|
- file->seek(pos);
|
|
|
|
|
|
+ file->seek(pos);
|
|
if(file->read(str, linesize) == -1)
|
|
if(file->read(str, linesize) == -1)
|
|
return luaL_error(L, "Read error.");
|
|
return luaL_error(L, "Read error.");
|
|
|
|
|
|
if(str[linesize-1]=='\r')
|
|
if(str[linesize-1]=='\r')
|
|
linesize -= 1;
|
|
linesize -= 1;
|
|
-
|
|
|
|
|
|
+
|
|
lua_pushlstring(L, str, linesize);
|
|
lua_pushlstring(L, str, linesize);
|
|
|
|
|
|
// Free the memory. Lua has a copy now.
|
|
// Free the memory. Lua has a copy now.
|
|
@@ -462,7 +462,7 @@ namespace physfs
|
|
// Set the beginning of the next line.
|
|
// Set the beginning of the next line.
|
|
if(!file->eof())
|
|
if(!file->eof())
|
|
file->seek(newline+1);
|
|
file->seek(newline+1);
|
|
-
|
|
|
|
|
|
+
|
|
return 1;
|
|
return 1;
|
|
}
|
|
}
|
|
|
|
|
|
@@ -486,7 +486,7 @@ namespace physfs
|
|
return luaL_error(L, "The argument must be a string.");
|
|
return luaL_error(L, "The argument must be a string.");
|
|
|
|
|
|
const char * filename = lua_tostring(L, -1);
|
|
const char * filename = lua_tostring(L, -1);
|
|
-
|
|
|
|
|
|
+
|
|
// The file must exist.
|
|
// The file must exist.
|
|
if(!exists(filename))
|
|
if(!exists(filename))
|
|
return luaL_error(L, "File %s does not exist.", filename);
|
|
return luaL_error(L, "File %s does not exist.", filename);
|