Exemplo n.º 1
0
/* Write a contiguous region of data blocks from a file */
int write_file_chunk(struct output_file *out, unsigned int len,
		const char *file, int64_t offset)
{
	int ret;

	int file_fd = open(file, O_RDONLY | O_BINARY);
	if (file_fd < 0) {
		return -errno;
	}

	ret = write_fd_chunk(out, len, file_fd, offset);

	close(file_fd);

	return ret;
}
Exemplo n.º 2
0
static void sparse_file_write_block(struct output_file *out,
		struct backed_block *bb)
{
	switch (backed_block_type(bb)) {
	case BACKED_BLOCK_DATA:
		write_data_chunk(out, backed_block_len(bb), backed_block_data(bb));
		break;
	case BACKED_BLOCK_FILE:
		write_file_chunk(out, backed_block_len(bb),
				backed_block_filename(bb), backed_block_file_offset(bb));
		break;
	case BACKED_BLOCK_FD:
		write_fd_chunk(out, backed_block_len(bb),
				backed_block_fd(bb), backed_block_file_offset(bb));
		break;
	case BACKED_BLOCK_FILL:
		write_fill_chunk(out, backed_block_len(bb),
				backed_block_fill_val(bb));
		break;
	}
}