Modified: trunk/Source/WTF/wtf/FileSystem.cpp (287079 => 287080)
--- trunk/Source/WTF/wtf/FileSystem.cpp 2021-12-15 17:46:07 UTC (rev 287079)
+++ trunk/Source/WTF/wtf/FileSystem.cpp 2021-12-15 17:50:28 UTC (rev 287080)
@@ -612,6 +612,7 @@
return std::filesystem::remove(fsPath, ec);
}
+#if !PLATFORM(PLAYSTATION)
bool moveFile(const String& oldPath, const String& newPath)
{
auto fsOldPath = toStdFileSystemPath(oldPath);
@@ -629,6 +630,7 @@
return false;
return std::filesystem::remove_all(fsOldPath, ec);
}
+#endif
std::optional<uint64_t> fileSize(const String& path)
{
@@ -639,6 +641,7 @@
return size;
}
+#if !PLATFORM(PLAYSTATION)
std::optional<uint64_t> volumeFreeSpace(const String& path)
{
std::error_code ec;
@@ -647,6 +650,7 @@
return std::nullopt;
return spaceInfo.available;
}
+#endif
bool createSymbolicLink(const String& targetPath, const String& symbolicLinkPath)
{
@@ -683,6 +687,7 @@
return ec ? std::nullopt : std::make_optional(linkCount);
}
+#if !PLATFORM(PLAYSTATION)
bool deleteNonEmptyDirectory(const String& path)
{
std::error_code ec;
@@ -689,6 +694,7 @@
std::filesystem::remove_all(toStdFileSystemPath(path), ec);
return !ec;
}
+#endif
std::optional<WallTime> fileModificationTime(const String& path)
{
@@ -756,6 +762,7 @@
return fromStdFileSystemPath(toStdFileSystemPath(path).parent_path());
}
+#if !PLATFORM(PLAYSTATION)
String realPath(const String& path)
{
std::error_code ec;
@@ -762,7 +769,9 @@
auto canonicalPath = std::filesystem::canonical(toStdFileSystemPath(path), ec);
return ec ? path : fromStdFileSystemPath(canonicalPath);
}
+#endif
+#if !PLATFORM(PLAYSTATION)
Vector<String> listDirectory(const String& path)
{
Vector<String> fileNames;
@@ -775,6 +784,7 @@
}
return fileNames;
}
+#endif
#if !ENABLE(FILESYSTEM_POSIX_FAST_PATH)
Modified: trunk/Source/WTF/wtf/playstation/FileSystemPlayStation.cpp (287079 => 287080)
--- trunk/Source/WTF/wtf/playstation/FileSystemPlayStation.cpp 2021-12-15 17:46:07 UTC (rev 287079)
+++ trunk/Source/WTF/wtf/playstation/FileSystemPlayStation.cpp 2021-12-15 17:50:28 UTC (rev 287080)
@@ -30,15 +30,8 @@
#include "config.h"
#include <wtf/FileSystem.h>
-#if !HAVE(STD_FILESYSTEM) && !HAVE(STD_EXPERIMENTAL_FILESYSTEM)
-
#include <dirent.h>
-#include <libgen.h>
#include <sys/statvfs.h>
-#include <sys/types.h>
-#include <unistd.h>
-#include <wtf/SafeStrerror.h>
-#include <wtf/text/StringBuilder.h>
namespace WTF {
@@ -64,47 +57,6 @@
return FileType::Regular;
}
-bool fileExists(const String& path)
-{
- if (path.isNull())
- return false;
-
- CString fsRep = fileSystemRepresentation(path);
-
- if (!fsRep.data() || fsRep.data()[0] == '\0')
- return false;
-
- return access(fsRep.data(), F_OK) != -1;
-}
-
-bool deleteFile(const String& path)
-{
- CString fsRep = fileSystemRepresentation(path);
-
- if (!fsRep.data() || fsRep.data()[0] == '\0') {
- LOG_ERROR("File failed to delete. Failed to get filesystem representation to create CString from cfString or filesystem representation is a null value");
- return false;
- }
-
- // unlink(...) returns 0 on successful deletion of the path and non-zero in any other case (including invalid permissions or non-existent file)
- bool unlinked = !unlink(fsRep.data());
- if (!unlinked && errno != ENOENT)
- LOG_ERROR("File failed to delete. Error message: %s", safeStrerror(errno).data());
-
- return unlinked;
-}
-
-bool deleteEmptyDirectory(const String& path)
-{
- CString fsRep = fileSystemRepresentation(path);
-
- if (!fsRep.data() || fsRep.data()[0] == '\0')
- return false;
-
- // rmdir(...) returns 0 on successful deletion of the path and non-zero in any other case (including invalid permissions or non-existent file)
- return !rmdir(fsRep.data());
-}
-
bool moveFile(const String& oldPath, const String& newPath)
{
auto oldFilename = fileSystemRepresentation(oldPath);
@@ -118,50 +70,6 @@
return rename(oldFilename.data(), newFilename.data()) != -1;
}
-std::optional<uint64_t> fileSize(const String& path)
-{
- CString fsRep = fileSystemRepresentation(path);
-
- if (!fsRep.data() || fsRep.data()[0] == '\0')
- return std::nullopt;
-
- struct stat fileInfo;
-
- if (stat(fsRep.data(), &fileInfo))
- return std::nullopt;
-
- return fileInfo.st_size;
-}
-
-bool makeAllDirectories(const String& path)
-{
- CString fullPath = fileSystemRepresentation(path);
- if (!access(fullPath.data(), F_OK))
- return true;
-
- char* p = fullPath.mutableData() + 1;
- int length = fullPath.length();
-
- if (p[length - 1] == '/')
- p[length - 1] = '\0';
- for (; *p; ++p) {
- if (*p == '/') {
- *p = '\0';
- if (access(fullPath.data(), F_OK)) {
- if (mkdir(fullPath.data(), S_IRWXU))
- return false;
- }
- *p = '/';
- }
- }
- if (access(fullPath.data(), F_OK)) {
- if (mkdir(fullPath.data(), S_IRWXU))
- return false;
- }
-
- return true;
-}
-
std::optional<uint64_t> volumeFreeSpace(const String& path)
{
struct statvfs fileSystemStat;
@@ -170,80 +78,45 @@
return std::nullopt;
}
-bool createSymbolicLink(const String& targetPath, const String& symbolicLinkPath)
+Vector<String> listDirectorySub(const String& path, bool fullPath)
{
- CString targetPathFSRep = fileSystemRepresentation(targetPath);
- if (!targetPathFSRep.data() || targetPathFSRep.data()[0] == '\0')
- return false;
+ Vector<String> entries;
+ CString cpath = fileSystemRepresentation(path);
+ DIR* dir = opendir(cpath.data());
+ if (dir) {
+ struct dirent* dp;
+ while ((dp = readdir(dir))) {
+ const char* name = dp->d_name;
+ if (!strcmp(name, ".") || !strcmp(name, ".."))
+ continue;
+ String newEntry;
+ if (fullPath) {
+ char filePath[PATH_MAX];
+ if (fullPath && static_cast<int>(sizeof(filePath) - 1) < snprintf(filePath, sizeof(filePath), "%s/%s", cpath.data(), name))
+ continue; // buffer overflow
- CString symbolicLinkPathFSRep = fileSystemRepresentation(symbolicLinkPath);
- if (!symbolicLinkPathFSRep.data() || symbolicLinkPathFSRep.data()[0] == '\0')
- return false;
+ newEntry = stringFromFileSystemRepresentation(filePath);
+ } else
+ newEntry = stringFromFileSystemRepresentation(name);
- return !symlink(targetPathFSRep.data(), symbolicLinkPathFSRep.data());
+ // Some file system representations cannot be represented as a UTF-16 string,
+ // so this newEntry might be null.
+ if (!newEntry.isNull())
+ entries.append(WTFMove(newEntry));
+ }
+ closedir(dir);
+ }
+ return entries;
}
-bool hardLink(const String& source, const String& destination)
+Vector<String> listDirectory(const String& path)
{
- if (source.isEmpty() || destination.isEmpty())
- return false;
-
- auto fsSource = fileSystemRepresentation(source);
- if (!fsSource.data())
- return false;
-
- auto fsDestination = fileSystemRepresentation(destination);
- if (!fsDestination.data())
- return false;
-
- return !link(fsSource.data(), fsDestination.data());
+ return listDirectorySub(path, false);
}
-bool hardLinkOrCopyFile(const String& source, const String& destination)
-{
- if (hardLink(source, destination))
- return true;
-
- // Hard link failed. Perform a copy instead.
- if (source.isEmpty() || destination.isEmpty())
- return false;
-
- auto fsSource = fileSystemRepresentation(source);
- if (!fsSource.data())
- return false;
-
- auto fsDestination = fileSystemRepresentation(destination);
- if (!fsDestination.data())
- return false;
-
- auto handle = open(fsDestination.data(), O_WRONLY | O_CREAT | O_EXCL, 0666);
- if (handle == -1)
- return false;
-
- bool appendResult = appendFileContentsToFileHandle(source, handle);
- close(handle);
-
- // If the copy failed, delete the unusable file.
- if (!appendResult)
- unlink(fsDestination.data());
-
- return appendResult;
-}
-
-std::optional<uint64_t> hardLinkCount(const String& path)
-{
- auto linkPath = fileSystemRepresentation(path);
- struct stat stat;
- if (::stat(linkPath.data(), &stat) < 0)
- return std::nullopt;
-
- // Link count is 2 in the single client case (the blob file and a link).
- return stat.st_nlink - 1;
-}
-
bool deleteNonEmptyDirectory(const String& path)
{
- auto entries = listDirectory(path);
+ auto entries = listDirectorySub(path, true);
for (auto& entry : entries) {
if (fileTypePotentiallyFollowingSymLinks(entry, ShouldFollowSymbolicLinks::No) == FileType::Directory)
deleteNonEmptyDirectory(entry);
@@ -253,64 +126,7 @@
return deleteEmptyDirectory(path);
}
-std::optional<WallTime> fileModificationTime(const String& path)
-{
- CString fsRep = fileSystemRepresentation(path);
- if (!fsRep.data() || fsRep.data()[0] == '\0')
- return std::nullopt;
-
- struct stat fileInfo;
-
- if (stat(fsRep.data(), &fileInfo))
- return std::nullopt;
-
- return WallTime::fromRawSeconds(fileInfo.st_mtime);
-}
-
-bool updateFileModificationTime(const String& path)
-{
- CString fsRep = fileSystemRepresentation(path);
-
- if (!fsRep.data() || fsRep.data()[0] == '\0')
- return false;
-
- // Passing in null sets the modification time to now
- return !utimes(fsRep.data(), nullptr);
-}
-
-bool isHiddenFile(const String& path)
-{
- auto filename = pathFileName(path);
-
- return !filename.isEmpty() && filename[0] == '.';
-}
-
-std::optional<FileType> fileType(const String& path)
-{
- return fileTypePotentiallyFollowingSymLinks(path, ShouldFollowSymbolicLinks::No);
-}
-
-std::optional<FileType> fileTypeFollowingSymlinks(const String& path)
-{
- return fileTypePotentiallyFollowingSymLinks(path, ShouldFollowSymbolicLinks::Yes);
-}
-
-String pathFileName(const String& path)
-{
- return path.substring(path.reverseFind('/') + 1);
-}
-
-String parentPath(const String& path)
-{
- CString fsRep = fileSystemRepresentation(path);
-
- if (!fsRep.data() || fsRep.data()[0] == '\0')
- return String();
-
- return String::fromUTF8(dirname(fsRep.mutableData()));
-}
-
String realPath(const String& filePath)
{
CString fsRep = fileSystemRepresentation(filePath);
@@ -319,50 +135,8 @@
return result ? String::fromUTF8(result) : filePath;
}
-String pathByAppendingComponent(const String& path, const String& component)
-{
- if (path.endsWith('/'))
- return path + component;
- return path + "/" + component;
-}
-String pathByAppendingComponents(StringView path, const Vector<StringView>& components)
-{
- StringBuilder builder;
- builder.append(path);
- for (auto& component : components)
- builder.append('/', component);
- return builder.toString();
-}
-Vector<String> listDirectory(const String& path)
-{
- Vector<String> entries;
- CString cpath = fileSystemRepresentation(path);
- DIR* dir = opendir(cpath.data());
- if (dir) {
- struct dirent* dp;
- while ((dp = readdir(dir))) {
- const char* name = dp->d_name;
- if (!strcmp(name, ".") || !strcmp(name, ".."))
- continue;
- char filePath[PATH_MAX];
- if (static_cast<int>(sizeof(filePath) - 1) < snprintf(filePath, sizeof(filePath), "%s/%s", cpath.data(), name))
- continue; // buffer overflow
-
- auto string = stringFromFileSystemRepresentation(filePath);
-
- // Some file system representations cannot be represented as a UTF-16 string,
- // so this string might be null.
- if (!string.isNull())
- entries.append(WTFMove(string));
- }
- closedir(dir);
- }
- return entries;
-}
-
} // namespace FileSystemImpl
} // namespace WTF
-#endif // !HAVE(STD_FILESYSTEM) && !HAVE(STD_EXPERIMENTAL_FILESYSTEM)