blob: 0b59c6a1ae43a8ae3574e4209b1eed1ca2913f58 [file] [log] [blame] [edit]
// 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 SRC_STORAGE_MINFS_INSPECTOR_INODE_H_
#define SRC_STORAGE_MINFS_INSPECTOR_INODE_H_
#include <disk_inspector/common_types.h>
#include <fbl/string_printf.h>
#include <fs/journal/format.h>
#include "src/storage/minfs/format.h"
#include "src/storage/minfs/minfs_private.h"
namespace minfs {
// Total number of fields in the on-disk inode structure.
constexpr uint32_t kInodeNumElements = 16;
class InodeObject : public disk_inspector::DiskObject {
public:
InodeObject() = delete;
InodeObject(const InodeObject&) = delete;
InodeObject(InodeObject&&) = delete;
InodeObject& operator=(const InodeObject&) = delete;
InodeObject& operator=(InodeObject&&) = delete;
InodeObject(uint32_t allocated_inode_index, uint32_t inode_index, Inode inode)
: allocated_inode_index_(allocated_inode_index),
inode_index_(inode_index),
inode_(inode),
name_(fbl::StringPrintf("allocated #%d, inode #%d", allocated_inode_index_, inode_index_)) {
}
// DiskObject interface:
const char* GetName() const override { return name_.c_str(); }
uint32_t GetNumElements() const override { return kInodeNumElements; }
void GetValue(const void** out_buffer, size_t* out_buffer_size) const override;
std::unique_ptr<DiskObject> GetElementAt(uint32_t index) const override;
private:
// Index of inode in list of only allocated inodes in inode table.
const uint32_t allocated_inode_index_;
// Position of inode in the inode table.
const uint32_t inode_index_;
const Inode inode_;
// TODO(fxbug.dev/37907): Currently the name is in the format "allocated #, inode #".
// We should change this once disk-inspect does not index based on allocations
// and rather the actual inode table index.
const fbl::String name_;
};
} // namespace minfs
#endif // SRC_STORAGE_MINFS_INSPECTOR_INODE_H_