Recreate love.filesystem.mount, adding mount and unmount, for your archive (and folder?) pleasure

--HG--
branch : love.filesystem.mount2
This commit is contained in:
Bart van Strien
2013-06-22 14:58:12 +02:00
parent 2426d97450
commit bff2c1b5f1
4 changed files with 53 additions and 0 deletions
@@ -182,6 +182,36 @@ bool Filesystem::setupWriteDirectory()
return true;
}
bool Filesystem::mount(const char *archive, const char *mountpoint)
{
if (!isInited)
return false;
if (strstr(archive, "..")) // Not allowed for safety reasons
return false;
std::string realPath = PHYSFS_getRealDir(archive);
realPath += LOVE_PATH_SEPARATOR;
realPath += archive;
return PHYSFS_mount(realPath.c_str(), mountpoint, 0);
}
bool Filesystem::unmount(const char *archive)
{
if (!isInited)
return false;
if (strstr(archive, "..")) // Not allowed for safety reasons
return false;
std::string realPath = PHYSFS_getRealDir(archive);
realPath += LOVE_PATH_SEPARATOR;
realPath += archive;
return PHYSFS_removeFromSearchPath(archive);
}
File *Filesystem::newFile(const char *filename) const
{
return new File(filename);
@@ -143,6 +143,8 @@ public:
* @param source Path to a directory or a .love-file.
**/
bool setSource(const char *source);
bool mount(const char *archive, const char *mountpoint);
bool unmount(const char *archive);
/**
* Creates a new file.
@@ -99,6 +99,23 @@ int w_setSource(lua_State *L)
return 0;
}
int w_mount(lua_State *L)
{
const char *archive = luaL_checkstring(L, 1);
const char *mountpoint = luaL_checkstring(L, 2);
luax_pushboolean(L, instance->mount(archive, mountpoint));
return 1;
}
int w_unmount(lua_State *L)
{
const char *archive = luaL_checkstring(L, 1);
luax_pushboolean(L, instance->unmount(archive));
return 1;
}
int w_newFile(lua_State *L)
{
const char *filename = luaL_checkstring(L, 1);
@@ -544,6 +561,8 @@ static const luaL_Reg functions[] =
{ "setIdentity", w_setIdentity },
{ "getIdentity", w_getIdentity },
{ "setSource", w_setSource },
{ "mount", w_mount },
{ "unmount", w_unmount },
{ "newFile", w_newFile },
{ "getWorkingDirectory", w_getWorkingDirectory },
{ "getUserDirectory", w_getUserDirectory },
@@ -42,6 +42,8 @@ int w_setRelease(lua_State *L);
int w_setIdentity(lua_State *L);
int w_getIdentity(lua_State *L);
int w_setSource(lua_State *L);
int w_mount(lua_State *L);
int w_unmount(lua_State *L);
int w_newFile(lua_State *L);
int w_newFileData(lua_State *L);
int w_getWorkingDirectory(lua_State *L);