Added love.filesystem.isSymlink, love.filesystem.setSymlinksEnabled, and love.filesystem.areSymlinksEnabled. Symbolic link support is disabled by default.

love.filesystem.isSymlink will always return false when symbolic link support is disabled, even if the given filepath is actually a symlink.
This commit is contained in:
Alex Szpakowski
2014-07-24 00:31:11 -03:00
parent 3ae336dd43
commit 73c0f1e222
4 changed files with 56 additions and 0 deletions
@@ -661,6 +661,21 @@ int64 Filesystem::getSize(const char *filename) const
return size; return size;
} }
void Filesystem::setSymlinksEnabled(bool enable)
{
PHYSFS_permitSymbolicLinks(enable ? 1 : 0);
}
bool Filesystem::areSymlinksEnabled() const
{
return PHYSFS_symbolicLinksPermitted() != 0;
}
bool Filesystem::isSymlink(const char *filename) const
{
return PHYSFS_isSymbolicLink(filename) != 0;
}
} // physfs } // physfs
} // filesystem } // filesystem
} // love } // love
@@ -247,6 +247,22 @@ public:
**/ **/
int64 getSize(const char *filename) const; int64 getSize(const char *filename) const;
/**
* Enable or disable symbolic link support in love.filesystem.
**/
void setSymlinksEnabled(bool enable);
/**
* Gets whether symbolic link support is enabled.
**/
bool areSymlinksEnabled() const;
/**
* Gets whether a filepath is actually a symlink.
* Always returns false if symlinks are not enabled.
**/
bool isSymlink(const char *filename) const;
/** /**
* Text file line-reading iterator function used and * Text file line-reading iterator function used and
* pushed on the Lua stack by love.filesystem.lines * pushed on the Lua stack by love.filesystem.lines
@@ -486,6 +486,25 @@ int w_getSize(lua_State *L)
return 1; return 1;
} }
int w_setSymlinksEnabled(lua_State *L)
{
instance()->setSymlinksEnabled(luax_toboolean(L, 1));
return 0;
}
int w_areSymlinksEnabled(lua_State *L)
{
luax_pushboolean(L, instance()->areSymlinksEnabled());
return 1;
}
int w_isSymlink(lua_State *L)
{
const char *filename = luaL_checkstring(L, 1);
luax_pushboolean(L, instance()->isSymlink(filename));
return 1;
}
int loader(lua_State *L) int loader(lua_State *L)
{ {
const char *filename = lua_tostring(L, -1); const char *filename = lua_tostring(L, -1);
@@ -645,6 +664,9 @@ static const luaL_Reg functions[] =
{ "load", w_load }, { "load", w_load },
{ "getLastModified", w_getLastModified }, { "getLastModified", w_getLastModified },
{ "getSize", w_getSize }, { "getSize", w_getSize },
{ "setSymlinksEnabled", w_setSymlinksEnabled },
{ "areSymlinksEnabled", w_areSymlinksEnabled },
{ "isSymlink", w_isSymlink },
{ "newFileData", w_newFileData }, { "newFileData", w_newFileData },
{ 0, 0 } { 0, 0 }
}; };
+3
View File
@@ -71,6 +71,9 @@ int w_lines(lua_State *L);
int w_load(lua_State *L); int w_load(lua_State *L);
int w_getLastModified(lua_State *L); int w_getLastModified(lua_State *L);
int w_getSize(lua_State *L); int w_getSize(lua_State *L);
int w_setSymlinksEnabled(lua_State *L);
int w_areSymlinksEnabled(lua_State *L);
int w_isSymlink(lua_State *L);
int loader(lua_State *L); int loader(lua_State *L);
int extloader(lua_State *L); int extloader(lua_State *L);
extern "C" LOVE_EXPORT int luaopen_love_filesystem(lua_State *L); extern "C" LOVE_EXPORT int luaopen_love_filesystem(lua_State *L);