Kaynağa Gözat

change(vfs): readdir callback should pass by ref.

greatbridf 1 yıl önce
ebeveyn
işleme
8b90f07a34
4 değiştirilmiş dosya ile 5 ekleme ve 5 silme
  1. 1 1
      include/fs/fat.hpp
  2. 1 1
      include/kernel/vfs.hpp
  3. 1 1
      src/fs/fat.cpp
  4. 2 2
      src/kernel/vfs.cpp

+ 1 - 1
include/fs/fat.hpp

@@ -168,7 +168,7 @@ public:
 
     virtual size_t inode_read(inode* file, char* buf, size_t buf_size, size_t offset, size_t n) override;
     virtual int inode_stat(dentry* ent, stat* st) override;
-    virtual int inode_readdir(fs::inode* dir, size_t offset, fs::vfs::filldir_func callback) override;
+    virtual int inode_readdir(fs::inode* dir, size_t offset, const fs::vfs::filldir_func& callback) override;
 };
 
 }; // namespace fs::fat

+ 1 - 1
include/kernel/vfs.hpp

@@ -196,7 +196,7 @@ public:
     // return -1 if an error occurred
     // return 0 if no more entry available
     // otherwise, return bytes to be added to the offset
-    virtual int inode_readdir(inode* dir, size_t offset, filldir_func callback) = 0;
+    virtual int inode_readdir(inode* dir, size_t offset, const filldir_func& callback) = 0;
 };
 
 class pipe : public types::non_copyable {

+ 1 - 1
src/fs/fat.cpp

@@ -63,7 +63,7 @@ void fat32::release_cluster(cluster_t no)
         --iter->second.ref;
 }
 
-int fat32::inode_readdir(fs::inode* dir, size_t offset, fs::vfs::filldir_func filldir)
+int fat32::inode_readdir(fs::inode* dir, size_t offset, const fs::vfs::filldir_func& filldir)
 {
     cluster_t next = cl(dir);
     for (size_t i = 0; i < (offset / (sectors_per_cluster * SECTOR_SIZE)); ++i) {

+ 2 - 2
src/kernel/vfs.cpp

@@ -152,7 +152,7 @@ int fs::vfs::load_dentry(dentry* ent)
 
     for (int ret = 1; ret > 0; offset += ret) {
         ret = this->inode_readdir(ind, offset,
-            [&, this](const char* name, size_t len, ino_t ino, uint8_t) -> int {
+            [ent, this](const char* name, size_t len, ino_t ino, uint8_t) -> int {
                 if (!len)
                     ent->append(get_inode(ino), name, false);
                 else
@@ -291,7 +291,7 @@ protected:
         dir->size += sizeof(fe_t);
     }
 
-    virtual int inode_readdir(fs::inode* dir, size_t offset, fs::vfs::filldir_func filldir) override
+    virtual int inode_readdir(fs::inode* dir, size_t offset, const fs::vfs::filldir_func& filldir) override
     {
         if (!dir->flags.in.directory) {
             return -1;