blob: b3c3375eaabbdc368965f571f55decc8e92179c8 [file] [log] [blame]
// Copyright 2019 The Fuchsia Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#ifndef LIB_VFS_CPP_INTERNAL_DIRENT_FILLER_H_
#define LIB_VFS_CPP_INTERNAL_DIRENT_FILLER_H_
#include <stdint.h>
#include <zircon/types.h>
#include <string>
namespace vfs {
namespace internal {
// Helper class used to fill direntries during calls to Readdir.
class DirentFiller {
public:
DirentFiller(const DirentFiller&) = delete;
DirentFiller& operator=(const DirentFiller&) = delete;
DirentFiller(void* ptr, uint64_t len);
// Attempts to add the name to the end of the dirent buffer
// which is returned by readdir.
// Will not write anything incase of error.
zx_status_t Next(const std::string& name, uint8_t type, uint64_t ino);
// Attempts to add the name to the end of the dirent buffer
// which is returned by readdir.
// Will not write anything incase of error.
zx_status_t Next(const char* name, size_t name_len, uint8_t type, uint64_t ino);
uint64_t GetBytesFilled() const { return pos_; }
private:
char* ptr_;
uint64_t pos_;
const uint64_t len_;
};
} // namespace internal
} // namespace vfs
#endif // LIB_VFS_CPP_INTERNAL_DIRENT_FILLER_H_