From: p.kosko@samsung.com
Date: Tue, 18 Jul 2023 12:13:05 +0000 (+0200)
Subject: Fixed listDirectory()
X-Git-Tag: accepted/tizen/7.0/unified/20240509.012454~2
X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=d0dc85d4016187ffc52f9de86982840ecb251059;p=platform%2Fcore%2Fapi%2Fwebapi-plugins.git
Fixed listDirectory()
[KONA] DF230714-00592
Issue: names returned via API can be invalid.
1. create many files in dir, 1-100.txt files
2. tizen.filesystem.listDirectory("documents", function(files) {f = files; console.log(files) }, function(e) { console.log(e) } )
issued list contains empty names/names with strange characters.
This fixes above problems.
[Verification] With above code, problem doesn't occur.
TCT passrate 100%.
Change-Id: Ief9ec91b0a130d789c8777423f51dfa6b2f6de9d
---
diff --git a/src/filesystem/filesystem_instance.cc b/src/filesystem/filesystem_instance.cc
index a07c7cef..236d2685 100644
--- a/src/filesystem/filesystem_instance.cc
+++ b/src/filesystem/filesystem_instance.cc
@@ -1657,7 +1657,8 @@ void FilesystemInstance::FileSystemManagerRename(const picojson::value& args,
ReportSuccess(out);
}
-void FilterResult(std::vector& names, std::vector& types, bool is_type,
+void FilterResult(std::vector& names,
+ std::vector& types, bool is_type,
unsigned char type) {
int i = (int)names.size() - 1;
@@ -1686,13 +1687,14 @@ void FilesystemInstance::FileSystemManagerListDirectory(const picojson::value& a
obj["callbackId"] = picojson::value(callback_id);
try {
- std::vector names;
+ std::vector names;
{
std::vector types;
- FilesystemUtils::ListDirectory(path, [&](const char* name, unsigned char type) {
- names.push_back(name);
- types.push_back(type);
- });
+ FilesystemUtils::ListDirectory(
+ path, [&](const std::string& name, unsigned char type) {
+ names.push_back(name);
+ types.push_back(type);
+ });
auto it = filter.find("isFile");
if (filter.end() != it) {
diff --git a/src/filesystem/filesystem_utils.cc b/src/filesystem/filesystem_utils.cc
index dccd81fe..e58887d3 100644
--- a/src/filesystem/filesystem_utils.cc
+++ b/src/filesystem/filesystem_utils.cc
@@ -161,7 +161,7 @@ void CopyFile(const std::string& src, const std::string& dest, bool overwrite) {
void CopyDirectory(const std::string& src, const std::string& dest, bool overwrite) {
ScopeLogger("From: %s, To %s", src.c_str(), dest.c_str());
- ListDirectory(src, [&](const char* name, unsigned char type) {
+ ListDirectory(src, [&](const std::string& name, unsigned char type) {
if (DT_DIR == type) {
std::string dest_dir = dest + '/' + name;
struct stat buf {};
@@ -188,7 +188,9 @@ void CopyDirectory(const std::string& src, const std::string& dest, bool overwri
});
}
-void ListDirectory(const std::string& path, std::function next) {
+void ListDirectory(
+ const std::string& path,
+ std::function next) {
ScopeLogger("%s", path.c_str());
DIR* d = ::opendir(path.c_str());
if (nullptr == d) {
@@ -218,7 +220,7 @@ void ListDirectory(const std::string& path, std::functiond_name, ".") || 0 == std::strcmp(entry->d_name, "..")) {
continue;
}
- next(entry->d_name, entry->d_type);
+ next(std::string(entry->d_name), entry->d_type);
}
}
diff --git a/src/filesystem/filesystem_utils.h b/src/filesystem/filesystem_utils.h
index 58882847..3a5fc3c3 100644
--- a/src/filesystem/filesystem_utils.h
+++ b/src/filesystem/filesystem_utils.h
@@ -92,7 +92,7 @@ void CopyDirectory(const std::string& src, const std::string& dest, bool overwri
* @brief Calls 'next' function with name for every entry in given directory
* @throw std::system_error
*/
-void ListDirectory(const std::string& path, std::function next);
+void ListDirectory(const std::string& path, std::function next);
/**
* @brief Removes directory recursively pointed by path.