#include "nls-enable.h"
#define QCOW_OFLAG_COPIED (1LL << 63)
+#define NO_BLK ((blk64_t) -1)
/* Image types */
#define E2IMAGE_RAW 1
static char * device_name = NULL;
static char all_data;
static char output_is_blk;
+static char nop_flag;
/* writing to blk device: don't skip zeroed blocks */
static blk64_t source_offset, dest_offset;
static char move_mode;
static void usage(void)
{
- fprintf(stderr, _("Usage: %s [-acfprsIQ] [-o src_offset] "
+ fprintf(stderr, _("Usage: %s [-acfnprsIQ] [-o src_offset] "
"[-O dest_offset] \\\n\tdevice image_file\n"),
program_name);
exit (1);
exit(1);
}
}
-
+ if (nop_flag) {
+ printf("Writing block %llu\n", (unsigned long long) block);
+ seek_relative(fd, blocksize);
+ return;
+ }
count = write(fd, buf, blocksize);
if (count != blocksize) {
if (count == -1)
if (hdr)
memcpy(header_buf, hdr, hdr_size);
- generic_write(fd, header_buf, wrt_size, 0);
+ generic_write(fd, header_buf, wrt_size, NO_BLK);
ext2fs_free_mem(&header_buf);
}
if (ftruncate64(fd, offset) < 0) {
seek_relative(fd, -1);
- generic_write(fd, zero_buf, 1, -1);
+ generic_write(fd, zero_buf, 1, NO_BLK);
}
}
#else
if (sparse && !distance) {
seek_relative(fd, sparse-1);
- generic_write(fd, zero_buf, 1, -1);
+ generic_write(fd, zero_buf, 1, NO_BLK);
}
#endif
ext2fs_free_mem(&zero_buf);
seek = table->offset;
}
- generic_write(fd, (char *)table->data, image->cluster_size , 0);
+ generic_write(fd, (char *)table->data, image->cluster_size,
+ NO_BLK);
put_used_table(image, &table);
seek += image->cluster_size;
}
seek_set(fd, ref->refcount_block_offset);
generic_write(fd, (char *)ref->refcount_block,
- img->cluster_size, 0);
+ img->cluster_size, NO_BLK);
memset(ref->refcount_block, 0, img->cluster_size);
ref->refcount_table[ref->refcount_table_index] =
ext2fs_cpu_to_be64(ref->refcount_block_offset);
seek_set(fd, ref->refcount_table_offset);
generic_write(fd, (char *)ref->refcount_table,
- ref->refcount_table_clusters << img->cluster_bits, 0);
+ ref->refcount_table_clusters << img->cluster_bits, NO_BLK);
seek_set(fd, ref->refcount_block_offset);
- generic_write(fd, (char *)ref->refcount_block, img->cluster_size, 0);
+ generic_write(fd, (char *)ref->refcount_block, img->cluster_size,
+ NO_BLK);
return 0;
}
}
}
- generic_write(fd, buf, fs->blocksize, 0);
+ generic_write(fd, buf, fs->blocksize, blk);
if (add_l2_item(img, blk, offset,
offset + img->cluster_size)) {
/* Write l1_table*/
seek_set(fd, img->l1_offset);
size = img->l1_size * sizeof(__u64);
- generic_write(fd, (char *)img->l1_table, size, 0);
+ generic_write(fd, (char *)img->l1_table, size, NO_BLK);
ext2fs_free_mem(&buf);
free_qcow2_image(img);
if (argc && *argv)
program_name = *argv;
add_error_table(&et_ext2_error_table);
- while ((c = getopt(argc, argv, "rsIQafo:O:pc")) != EOF)
+ while ((c = getopt(argc, argv, "nrsIQafo:O:pc")) != EOF)
switch (c) {
case 'I':
flags |= E2IMAGE_INSTALL_FLAG;
case 'f':
ignore_rw_mount = 1;
break;
+ case 'n':
+ nop_flag = 1;
+ break;
case 'o':
source_offset = strtoull(optarg, NULL, 0);
break;