341
341
cluster_offset = bdrv_getlength(s->hd);
342
/* round to cluster size */
343
cluster_offset = (cluster_offset + s->cluster_size - 1) &
344
~(s->cluster_size - 1);
345
bdrv_truncate(s->hd, cluster_offset + s->cluster_size);
346
/* if encrypted, we must initialize the cluster
347
content which won't be written */
348
if (s->crypt_method &&
349
(n_end - n_start) < s->cluster_sectors) {
351
start_sect = (offset & ~(s->cluster_size - 1)) >> 9;
352
memset(s->cluster_data + 512, 0x00, 512);
353
for(i = 0; i < s->cluster_sectors; i++) {
354
if (i < n_start || i >= n_end) {
355
encrypt_sectors(s, start_sect + i,
357
s->cluster_data + 512, 1, 1,
358
&s->aes_encrypt_key);
359
if (bdrv_pwrite(s->hd, cluster_offset + i * 512,
360
s->cluster_data, 512) != 512)
343
/* round to cluster size */
344
cluster_offset = (cluster_offset + s->cluster_size - 1) &
345
~(s->cluster_size - 1);
346
bdrv_truncate(s->hd, cluster_offset + s->cluster_size);
347
/* if encrypted, we must initialize the cluster
348
content which won't be written */
349
if (s->crypt_method &&
350
(n_end - n_start) < s->cluster_sectors) {
352
start_sect = (offset & ~(s->cluster_size - 1)) >> 9;
353
memset(s->cluster_data + 512, 0x00, 512);
354
for(i = 0; i < s->cluster_sectors; i++) {
355
if (i < n_start || i >= n_end) {
356
encrypt_sectors(s, start_sect + i,
358
s->cluster_data + 512, 1, 1,
359
&s->aes_encrypt_key);
360
if (bdrv_pwrite(s->hd, cluster_offset + i * 512,
361
s->cluster_data, 512) != 512)
367
cluster_offset |= QCOW_OFLAG_COMPRESSED |
368
(uint64_t)compressed_size << (63 - s->cluster_bits);
366
371
/* update L2 table */
747
752
header_size = sizeof(header);
748
753
backing_filename_len = 0;
749
754
if (backing_file) {
750
if (strcmp(backing_file, "fat:")) {
751
header.backing_file_offset = cpu_to_be64(header_size);
752
backing_filename_len = strlen(backing_file);
753
header.backing_file_size = cpu_to_be32(backing_filename_len);
754
header_size += backing_filename_len;
756
/* special backing file for vvfat */
755
header.backing_file_offset = cpu_to_be64(header_size);
756
backing_filename_len = strlen(backing_file);
757
header.backing_file_size = cpu_to_be32(backing_filename_len);
758
header_size += backing_filename_len;
759
header.mtime = cpu_to_be32(0);
759
760
header.cluster_bits = 9; /* 512 byte cluster to avoid copying
760
761
unmodifyed sectors */
761
762
header.l2_bits = 12; /* 32 KB L2 tables */