libsparse: add sparse_file_len
Add sparse_file_len, which will compute the size of data that would be produced if sparse_file_write was called. Useful combined with sparse_file_callback. Change-Id: I1a156d1071760f5559483954a5c62ffc20298703
This commit is contained in:
parent
bdc6d39ed6
commit
317a09e2d4
2 changed files with 38 additions and 0 deletions
|
|
@ -157,6 +157,20 @@ int sparse_file_add_fd(struct sparse_file *s,
|
|||
int sparse_file_write(struct sparse_file *s, int fd, bool gz, bool sparse,
|
||||
bool crc);
|
||||
|
||||
/**
|
||||
* sparse_file_len - return the length of a sparse file if written to disk
|
||||
*
|
||||
* @s - sparse file cookie
|
||||
* @sparse - write in the Android sparse file format
|
||||
* @crc - append a crc chunk
|
||||
*
|
||||
* Returns the size a sparse file would be on disk if it were written in the
|
||||
* specified format. If sparse is true, this is the size of the data in the
|
||||
* sparse format. If sparse is false, this is the size of the normal
|
||||
* non-sparse file.
|
||||
*/
|
||||
int64_t sparse_file_len(struct sparse_file *s, bool sparse, bool crc);
|
||||
|
||||
/**
|
||||
* sparse_file_callback - call a callback for blocks in sparse file
|
||||
*
|
||||
|
|
|
|||
|
|
@ -196,6 +196,30 @@ static int out_counter_write(void *priv, const void *data, int len)
|
|||
return 0;
|
||||
}
|
||||
|
||||
int64_t sparse_file_len(struct sparse_file *s, bool sparse, bool crc)
|
||||
{
|
||||
int ret;
|
||||
int chunks = sparse_count_chunks(s);
|
||||
int64_t count = 0;
|
||||
struct output_file *out;
|
||||
|
||||
out = open_output_callback(out_counter_write, &count,
|
||||
s->block_size, s->len, false, sparse, chunks, crc);
|
||||
if (!out) {
|
||||
return -1;
|
||||
}
|
||||
|
||||
ret = write_all_blocks(s, out);
|
||||
|
||||
close_output_file(out);
|
||||
|
||||
if (ret < 0) {
|
||||
return -1;
|
||||
}
|
||||
|
||||
return count;
|
||||
}
|
||||
|
||||
static struct backed_block *move_chunks_up_to_len(struct sparse_file *from,
|
||||
struct sparse_file *to, unsigned int len)
|
||||
{
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue