// Copyright (c) 2010 The Chromium OS 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 CHROMEOS_PLATFORM_UPDATE_ENGINE_EXTENT_MAPPER_H_
#define CHROMEOS_PLATFORM_UPDATE_ENGINE_EXTENT_MAPPER_H_

#include <string>
#include <vector>
#include "base/basictypes.h"
#include "update_engine/update_metadata.pb.h"

namespace chromeos_update_engine {

namespace extent_mapper {

// Uses the FIBMAP ioctl to get all blocks used by a file and return them
// as extents. Blocks are relative to the start of the filesystem. If
// there is a sparse "hole" in the file, the blocks for that will be
// represented by an extent whose start block is kSpareseHole.
// The resulting extents are stored in 'out'. Keep in mind that while
// the blocksize of a filesystem is often 4096 bytes, that is not always
// the case, so one should consult GetFilesystemBlockSize(), too.
// Returns true on success.
//
// ExtentsForFileChunkFibmap gets the blocks starting from
// |chunk_offset|. |chunk_offset| must be a multiple of the block size. If
// |chunk_size| is not -1, only blocks covering up to |chunk_size| bytes are
// returned.
bool ExtentsForFileFibmap(const std::string& path, std::vector<Extent>* out);
bool ExtentsForFileChunkFibmap(const std::string& path,
                               off_t chunk_offset,
                               off_t chunk_size,
                               std::vector<Extent>* out);

// Puts the blocksize of the filesystem, as used by the FIBMAP ioctl, into
// out_blocksize by using the FIGETBSZ ioctl. Returns true on success.
bool GetFilesystemBlockSize(const std::string& path, uint32_t* out_blocksize);

}  // namespace extent_mapper

}  // namespace chromeos_update_engine

#endif  // CHROMEOS_PLATFORM_UPDATE_ENGINE_EXTENT_MAPPER_H_
