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
diff --git a/libsparse/sparse.c b/libsparse/sparse.c
index 77f02fc..f04f687 100644
--- a/libsparse/sparse.c
+++ b/libsparse/sparse.c
@@ -196,6 +196,30 @@
 	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)
 {