Fixed listDirectory() 35/296035/1
authorp.kosko@samsung.com <p.kosko@samsung.com>
Tue, 18 Jul 2023 12:13:05 +0000 (14:13 +0200)
committerPiotr Kosko <p.kosko@samsung.com>
Tue, 18 Jul 2023 12:24:34 +0000 (12:24 +0000)
[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

src/filesystem/filesystem_instance.cc
src/filesystem/filesystem_utils.cc
src/filesystem/filesystem_utils.h

index a07c7ce..236d268 100644 (file)
@@ -1657,7 +1657,8 @@ void FilesystemInstance::FileSystemManagerRename(const picojson::value& args,
   ReportSuccess(out);
 }
 
-void FilterResult(std::vector<const char*>& names, std::vector<unsigned char>& types, bool is_type,
+void FilterResult(std::vector<std::string>& names,
+                  std::vector<unsigned char>& 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<const char*> names;
+      std::vector<std::string> names;
       {
         std::vector<unsigned char> 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) {
index dccd81f..e58887d 100644 (file)
@@ -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<void(const char*, unsigned char)> next) {
+void ListDirectory(
+    const std::string& path,
+    std::function<void(const std::string&, unsigned char)> 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::function<void(const char*, unsi
     if (0 == std::strcmp(entry->d_name, ".") || 0 == std::strcmp(entry->d_name, "..")) {
       continue;
     }
-    next(entry->d_name, entry->d_type);
+    next(std::string(entry->d_name), entry->d_type);
   }
 }
 
index 5888284..3a5fc3c 100644 (file)
@@ -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<void(const char*, unsigned char)> next);
+void ListDirectory(const std::string& path, std::function<void(const std::string&, unsigned char)> next);
 
 /**
  * @brief Removes directory recursively pointed by path.