diff --git a/changes.txt b/changes.txt index f3f8f98d3..ec12a1399 100644 --- a/changes.txt +++ b/changes.txt @@ -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.) diff --git a/src/modules/filesystem/Filesystem.h b/src/modules/filesystem/Filesystem.h index 257c456af..f21141579 100644 --- a/src/modules/filesystem/Filesystem.h +++ b/src/modules/filesystem/Filesystem.h @@ -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 &getRequirePath() = 0; diff --git a/src/modules/filesystem/physfs/Filesystem.cpp b/src/modules/filesystem/physfs/Filesystem.cpp index 1c0b71755..ee0498cc7 100644 --- a/src/modules/filesystem/physfs/Filesystem.cpp +++ b/src/modules/filesystem/physfs/Filesystem.cpp @@ -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 &Filesystem::getRequirePath() { return requirePath; diff --git a/src/modules/filesystem/physfs/Filesystem.h b/src/modules/filesystem/physfs/Filesystem.h index d3cd96653..fc6941e48 100644 --- a/src/modules/filesystem/physfs/Filesystem.h +++ b/src/modules/filesystem/physfs/Filesystem.h @@ -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 &getRequirePath(); diff --git a/src/modules/filesystem/wrap_Filesystem.cpp b/src/modules/filesystem/wrap_Filesystem.cpp index 9b22b60c2..9c7e26d5f 100644 --- a/src/modules/filesystem/wrap_Filesystem.cpp +++ b/src/modules/filesystem/wrap_Filesystem.cpp @@ -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 },