mirror of
https://github.com/love2d/love.git
synced 2026-08-14 10:13:46 +02:00
Re-added love.filesystem.exists.
If PhysFS 2.1-alpha is used and a directory is symlinked, isDirectory will return false (whereas it will return true when PhysFS 2.0 is used.) exists will return true in all cases.
This commit is contained in:
@@ -79,7 +79,6 @@ Released: N/A
|
||||
* Renamed Canvas:getImageData to Canvas:newImageData.
|
||||
* Renamed love.image's CompressedData type to CompressedImageData.
|
||||
|
||||
* Removed love.filesystem.exists (use love.filesystem.isFile or love.filesystem.isDirectory instead.)
|
||||
* Removed callback variant of love.filesystem.getDirectoryItems.
|
||||
* Removed the "wu" and "wd" constants for love.mousepressed (replaced by love.wheelmoved.)
|
||||
* Removed the named mouse button constants (replaced by button numbers.)
|
||||
|
||||
@@ -156,6 +156,12 @@ public:
|
||||
**/
|
||||
virtual std::string getRealDirectory(const char *filename) const = 0;
|
||||
|
||||
/**
|
||||
* Checks if a path exists.
|
||||
* @param path The path to check.
|
||||
**/
|
||||
virtual bool exists(const char *path) const = 0;
|
||||
|
||||
/**
|
||||
* Checks if a path is a directory.
|
||||
* @param dir The directory name to check.
|
||||
@@ -168,6 +174,12 @@ public:
|
||||
**/
|
||||
virtual bool isFile(const char *file) const = 0;
|
||||
|
||||
/**
|
||||
* Gets whether a filepath is actually a symlink.
|
||||
* Always returns false if symlinks are not enabled.
|
||||
**/
|
||||
virtual bool isSymlink(const char *filename) const = 0;
|
||||
|
||||
/**
|
||||
* Creates a directory. Write dir must be set.
|
||||
* @param dir The directory to create.
|
||||
@@ -232,12 +244,6 @@ public:
|
||||
**/
|
||||
virtual bool areSymlinksEnabled() const = 0;
|
||||
|
||||
/**
|
||||
* Gets whether a filepath is actually a symlink.
|
||||
* Always returns false if symlinks are not enabled.
|
||||
**/
|
||||
virtual bool isSymlink(const char *filename) const = 0;
|
||||
|
||||
// Require path accessors
|
||||
// Not const because it's R/W
|
||||
virtual std::vector<std::string> &getRequirePath() = 0;
|
||||
|
||||
@@ -579,6 +579,11 @@ std::string Filesystem::getRealDirectory(const char *filename) const
|
||||
return std::string(dir);
|
||||
}
|
||||
|
||||
bool Filesystem::exists(const char *path) const
|
||||
{
|
||||
return PHYSFS_exists(path) != 0;
|
||||
}
|
||||
|
||||
bool Filesystem::isDirectory(const char *dir) const
|
||||
{
|
||||
#ifdef LOVE_USE_PHYSFS_2_1
|
||||
@@ -597,6 +602,19 @@ bool Filesystem::isFile(const char *file) const
|
||||
return PHYSFS_exists(file) && !isDirectory(file);
|
||||
}
|
||||
|
||||
bool Filesystem::isSymlink(const char *filename) const
|
||||
{
|
||||
#ifdef LOVE_USE_PHYSFS_2_1
|
||||
PHYSFS_Stat stat = {};
|
||||
if (PHYSFS_stat(filename, &stat))
|
||||
return stat.filetype == PHYSFS_FILETYPE_SYMLINK;
|
||||
else
|
||||
return false;
|
||||
#else
|
||||
return PHYSFS_isSymbolicLink(filename) != 0;
|
||||
#endif
|
||||
}
|
||||
|
||||
bool Filesystem::createDirectory(const char *dir)
|
||||
{
|
||||
if (PHYSFS_getWriteDir() == 0 && !setupWriteDirectory())
|
||||
@@ -705,19 +723,6 @@ bool Filesystem::areSymlinksEnabled() const
|
||||
return PHYSFS_symbolicLinksPermitted() != 0;
|
||||
}
|
||||
|
||||
bool Filesystem::isSymlink(const char *filename) const
|
||||
{
|
||||
#ifdef LOVE_USE_PHYSFS_2_1
|
||||
PHYSFS_Stat stat = {};
|
||||
if (PHYSFS_stat(filename, &stat))
|
||||
return stat.filetype == PHYSFS_FILETYPE_SYMLINK;
|
||||
else
|
||||
return false;
|
||||
#else
|
||||
return PHYSFS_isSymbolicLink(filename) != 0;
|
||||
#endif
|
||||
}
|
||||
|
||||
std::vector<std::string> &Filesystem::getRequirePath()
|
||||
{
|
||||
return requirePath;
|
||||
|
||||
@@ -75,8 +75,10 @@ public:
|
||||
|
||||
std::string getRealDirectory(const char *filename) const;
|
||||
|
||||
bool exists(const char *path) const;
|
||||
bool isDirectory(const char *dir) const;
|
||||
bool isFile(const char *file) const;
|
||||
bool isSymlink(const char *filename) const;
|
||||
|
||||
bool createDirectory(const char *dir);
|
||||
|
||||
@@ -93,7 +95,6 @@ public:
|
||||
|
||||
void setSymlinksEnabled(bool enable);
|
||||
bool areSymlinksEnabled() const;
|
||||
bool isSymlink(const char *filename) const;
|
||||
|
||||
std::vector<std::string> &getRequirePath();
|
||||
|
||||
|
||||
@@ -316,6 +316,13 @@ int w_getExecutablePath(lua_State *L)
|
||||
return 1;
|
||||
}
|
||||
|
||||
int w_exists(lua_State *L)
|
||||
{
|
||||
const char *arg = luaL_checkstring(L, 1);
|
||||
luax_pushboolean(L, instance()->exists(arg));
|
||||
return 1;
|
||||
}
|
||||
|
||||
int w_isDirectory(lua_State *L)
|
||||
{
|
||||
const char *arg = luaL_checkstring(L, 1);
|
||||
@@ -330,6 +337,13 @@ int w_isFile(lua_State *L)
|
||||
return 1;
|
||||
}
|
||||
|
||||
int w_isSymlink(lua_State *L)
|
||||
{
|
||||
const char *filename = luaL_checkstring(L, 1);
|
||||
luax_pushboolean(L, instance()->isSymlink(filename));
|
||||
return 1;
|
||||
}
|
||||
|
||||
int w_createDirectory(lua_State *L)
|
||||
{
|
||||
const char *arg = luaL_checkstring(L, 1);
|
||||
@@ -551,13 +565,6 @@ int w_areSymlinksEnabled(lua_State *L)
|
||||
return 1;
|
||||
}
|
||||
|
||||
int w_isSymlink(lua_State *L)
|
||||
{
|
||||
const char *filename = luaL_checkstring(L, 1);
|
||||
luax_pushboolean(L, instance()->isSymlink(filename));
|
||||
return 1;
|
||||
}
|
||||
|
||||
int w_getRequirePath(lua_State *L)
|
||||
{
|
||||
std::stringstream path;
|
||||
@@ -715,8 +722,10 @@ static const luaL_Reg functions[] =
|
||||
{ "getSourceBaseDirectory", w_getSourceBaseDirectory },
|
||||
{ "getRealDirectory", w_getRealDirectory },
|
||||
{ "getExecutablePath", w_getExecutablePath },
|
||||
{ "exists", w_exists },
|
||||
{ "isDirectory", w_isDirectory },
|
||||
{ "isFile", w_isFile },
|
||||
{ "isSymlink", w_isSymlink },
|
||||
{ "createDirectory", w_createDirectory },
|
||||
{ "remove", w_remove },
|
||||
{ "read", w_read },
|
||||
@@ -729,7 +738,6 @@ static const luaL_Reg functions[] =
|
||||
{ "getSize", w_getSize },
|
||||
{ "setSymlinksEnabled", w_setSymlinksEnabled },
|
||||
{ "areSymlinksEnabled", w_areSymlinksEnabled },
|
||||
{ "isSymlink", w_isSymlink },
|
||||
{ "newFileData", w_newFileData },
|
||||
{ "getRequirePath", w_getRequirePath },
|
||||
{ "setRequirePath", w_setRequirePath },
|
||||
|
||||
Reference in New Issue
Block a user