blob: fca88323967f04a50b381ed23c781c7eae383d09 [file] [log] [blame]
// Copyright 2020 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_BLOBFS_INSPECTOR_PARSER_H_
#define SRC_STORAGE_BLOBFS_INSPECTOR_PARSER_H_
#include <storage/buffer/block_buffer.h>
#include "src/storage/blobfs/format.h"
namespace blobfs {
// Non-member functions to interpret BlockBuffer contents as on-disk structs. These functions take a
// block buffer that is assumed to have the relevant data already loaded.
// Parses the first block in the argument buffer as a Superblock.
Superblock GetSuperblock(storage::BlockBuffer* buffer);
// Parses the bit at specified index in the buffer following the ulib/bitmap implementation,
// differing in that this function uses uint64_t unlike size_t for the bitmap implementation.
// Assumes the data in the entire buffer is part of the bitmap.
bool GetBitmapElement(storage::BlockBuffer* buffer, uint64_t index);
// Parses the inode at the specified index in the buffer following on-disk format. Assumes the data
// in the entire buffer is the inode table. No dedicated GetExtentContainer function is provided.
// The inode's asExtentContainer function should be used to provide that functionality.
Inode GetInodeElement(storage::BlockBuffer* buffer, uint64_t index);
// Writes the bit at specified index in the buffer following the ulib/bitmap implementation,
// differing in that this function uses uint64_t unlike size_t for the bitmap implementation.
// Assumes the data in the entire buffer is part of the bitmap.
void WriteBitmapElement(storage::BlockBuffer* buffer, bool value, uint64_t index);
// Writes the inode at the specified index in the buffer following on-disk format. Assumes the data
// in the entire buffer is the inode table.
void WriteInodeElement(storage::BlockBuffer* buffer, Inode inode, uint64_t index);
} // namespace blobfs
#endif // SRC_STORAGE_BLOBFS_INSPECTOR_PARSER_H_