|  | // 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_ |