X-Git-Url: http://git.maemo.org/git/?a=blobdiff_plain;f=block-vmdk.c;h=d47d4837a149dbacba7101db0009aa5f421574f1;hb=81f099ad3266eede194bcb80f44e9ffe1772f257;hp=9b5fb7346a9f932cddfd194c15032ffb47a02063;hpb=b34d259a81500d75e4cf435f1e8b262ba7e1421a;p=qemu diff --git a/block-vmdk.c b/block-vmdk.c index 9b5fb73..d47d483 100644 --- a/block-vmdk.c +++ b/block-vmdk.c @@ -119,7 +119,7 @@ static uint32_t vmdk_read_cid(BlockDriverState *bs, int parent) BDRVVmdkState *s = bs->opaque; char desc[DESC_SIZE]; uint32_t cid; - char *p_name, *cid_str; + const char *p_name, *cid_str; size_t cid_str_size; /* the descriptor offset = 0x200 */ @@ -134,7 +134,7 @@ static uint32_t vmdk_read_cid(BlockDriverState *bs, int parent) cid_str_size = sizeof("CID"); } - if ((p_name = strstr(desc,cid_str)) != 0) { + if ((p_name = strstr(desc,cid_str)) != NULL) { p_name += cid_str_size; sscanf(p_name,"%x",&cid); } @@ -153,11 +153,11 @@ static int vmdk_write_cid(BlockDriverState *bs, uint32_t cid) return -1; tmp_str = strstr(desc,"parentCID"); - strcpy(tmp_desc, tmp_str); - if ((p_name = strstr(desc,"CID")) != 0) { + pstrcpy(tmp_desc, sizeof(tmp_desc), tmp_str); + if ((p_name = strstr(desc,"CID")) != NULL) { p_name += sizeof("CID"); - sprintf(p_name,"%x\n",cid); - strcat(desc,tmp_desc); + snprintf(p_name, sizeof(desc) - (p_name - desc), "%x\n", cid); + pstrcat(desc, sizeof(desc), tmp_desc); } if (bdrv_pwrite(s->hd, 0x200, desc, DESC_SIZE) != DESC_SIZE) @@ -193,7 +193,7 @@ static int vmdk_snapshot_create(const char *filename, const char *backing_file) uint32_t gde_entries, gd_size; int64_t gd_offset, rgd_offset, capacity, gt_size; char p_desc[DESC_SIZE], s_desc[DESC_SIZE], hdr[HEADER_SIZE]; - char *desc_template = + static const char desc_template[] = "# Disk DescriptorFile\n" "version=1\n" "CID=%x\n" @@ -202,7 +202,7 @@ static int vmdk_snapshot_create(const char *filename, const char *backing_file) "parentFileNameHint=\"%s\"\n" "\n" "# Extent description\n" - "RW %lu SPARSE \"%s\"\n" + "RW %u SPARSE \"%s\"\n" "\n" "# The Disk Data Base \n" "#DDB\n" @@ -239,7 +239,7 @@ static int vmdk_snapshot_create(const char *filename, const char *backing_file) if (read(p_fd, p_desc, DESC_SIZE) != DESC_SIZE) goto fail; - if ((p_name = strstr(p_desc,"CID")) != 0) { + if ((p_name = strstr(p_desc,"CID")) != NULL) { p_name += sizeof("CID"); sscanf(p_name,"%x",&p_cid); } @@ -252,8 +252,8 @@ static int vmdk_snapshot_create(const char *filename, const char *backing_file) if ((temp_str = strrchr(real_filename, ':')) != NULL) real_filename = temp_str + 1; - sprintf(s_desc, desc_template, p_cid, p_cid, backing_file - , (uint32_t)header.capacity, real_filename); + snprintf(s_desc, sizeof(s_desc), desc_template, p_cid, p_cid, backing_file, + (uint32_t)header.capacity, real_filename); /* write the descriptor */ if (lseek(snp_fd, 0x200, SEEK_SET) == -1) @@ -276,8 +276,6 @@ static int vmdk_snapshot_create(const char *filename, const char *backing_file) /* write RGD */ rgd_buf = qemu_malloc(gd_size); - if (!rgd_buf) - goto fail; if (lseek(p_fd, rgd_offset, SEEK_SET) == -1) goto fail_rgd; if (read(p_fd, rgd_buf, gd_size) != gd_size) @@ -290,8 +288,6 @@ static int vmdk_snapshot_create(const char *filename, const char *backing_file) /* write GD */ gd_buf = qemu_malloc(gd_size); - if (!gd_buf) - goto fail_rgd; if (lseek(p_fd, gd_offset, SEEK_SET) == -1) goto fail_gd; if (read(p_fd, gd_buf, gd_size) != gd_size) @@ -322,7 +318,7 @@ static void vmdk_parent_close(BlockDriverState *bs) bdrv_close(bs->backing_hd); } -int parent_open = 0; +static int parent_open = 0; static int vmdk_parent_open(BlockDriverState *bs, const char * filename) { BDRVVmdkState *s = bs->opaque; @@ -334,22 +330,23 @@ static int vmdk_parent_open(BlockDriverState *bs, const char * filename) if (bdrv_pread(s->hd, 0x200, desc, DESC_SIZE) != DESC_SIZE) return -1; - if ((p_name = strstr(desc,"parentFileNameHint")) != 0) { + if ((p_name = strstr(desc,"parentFileNameHint")) != NULL) { char *end_name; struct stat file_buf; p_name += sizeof("parentFileNameHint") + 1; - if ((end_name = strchr(p_name,'\"')) == 0) + if ((end_name = strchr(p_name,'\"')) == NULL) return -1; if ((end_name - p_name) > sizeof (s->hd->backing_file) - 1) return -1; - strncpy(s->hd->backing_file, p_name, end_name - p_name); + pstrcpy(s->hd->backing_file, end_name - p_name + 1, p_name); if (stat(s->hd->backing_file, &file_buf) != 0) { path_combine(parent_img_name, sizeof(parent_img_name), filename, s->hd->backing_file); } else { - strcpy(parent_img_name, s->hd->backing_file); + pstrcpy(parent_img_name, sizeof(parent_img_name), + s->hd->backing_file); } s->hd->backing_hd = bdrv_new(""); @@ -376,7 +373,6 @@ static int vmdk_open(BlockDriverState *bs, const char *filename, int flags) if (parent_open) // Parent must be opened as RO. flags = BDRV_O_RDONLY; - fprintf(stderr, "(VMDK) image open: flags=0x%x filename=%s\n", flags, bs->filename); ret = bdrv_file_open(&s->hd, filename, flags); if (ret < 0) @@ -430,8 +426,6 @@ static int vmdk_open(BlockDriverState *bs, const char *filename, int flags) /* read the L1 table */ l1_size = s->l1_size * sizeof(uint32_t); s->l1_table = qemu_malloc(l1_size); - if (!s->l1_table) - goto fail; if (bdrv_pread(s->hd, s->l1_table_offset, s->l1_table, l1_size) != l1_size) goto fail; for(i = 0; i < s->l1_size; i++) { @@ -440,8 +434,6 @@ static int vmdk_open(BlockDriverState *bs, const char *filename, int flags) if (s->l1_backup_table_offset) { s->l1_backup_table = qemu_malloc(l1_size); - if (!s->l1_backup_table) - goto fail; if (bdrv_pread(s->hd, s->l1_backup_table_offset, s->l1_backup_table, l1_size) != l1_size) goto fail; for(i = 0; i < s->l1_size; i++) { @@ -450,8 +442,6 @@ static int vmdk_open(BlockDriverState *bs, const char *filename, int flags) } s->l2_cache = qemu_malloc(s->l2_size * L2_CACHE_SIZE * sizeof(uint32_t)); - if (!s->l2_cache) - goto fail; return 0; fail: qemu_free(s->l1_backup_table); @@ -702,7 +692,7 @@ static int vmdk_create(const char *filename, int64_t total_size, int fd, i; VMDK4Header header; uint32_t tmp, magic, grains, gd_size, gt_size, gt_count; - char *desc_template = + static const char desc_template[] = "# Disk DescriptorFile\n" "version=1\n" "CID=%x\n" @@ -710,13 +700,13 @@ static int vmdk_create(const char *filename, int64_t total_size, "createType=\"monolithicSparse\"\n" "\n" "# Extent description\n" - "RW %lu SPARSE \"%s\"\n" + "RW %" PRId64 " SPARSE \"%s\"\n" "\n" "# The Disk Data Base \n" "#DDB\n" "\n" "ddb.virtualHWVersion = \"%d\"\n" - "ddb.geometry.cylinders = \"%lu\"\n" + "ddb.geometry.cylinders = \"%" PRId64 "\"\n" "ddb.geometry.heads = \"16\"\n" "ddb.geometry.sectors = \"63\"\n" "ddb.adapterType = \"ide\"\n"; @@ -791,8 +781,10 @@ static int vmdk_create(const char *filename, int64_t total_size, real_filename = temp_str + 1; if ((temp_str = strrchr(real_filename, ':')) != NULL) real_filename = temp_str + 1; - sprintf(desc, desc_template, time(NULL), (unsigned long)total_size, - real_filename, (flags & BLOCK_FLAG_COMPAT6 ? 6 : 4), total_size / (63 * 16)); + snprintf(desc, sizeof(desc), desc_template, (unsigned int)time(NULL), + total_size, real_filename, + (flags & BLOCK_FLAG_COMPAT6 ? 6 : 4), + total_size / (int64_t)(63 * 16)); /* write the descriptor */ lseek(fd, le64_to_cpu(header.desc_offset) << 9, SEEK_SET); @@ -808,9 +800,9 @@ static void vmdk_close(BlockDriverState *bs) qemu_free(s->l1_table); qemu_free(s->l2_cache); - bdrv_delete(s->hd); // try to close parent image, if exist vmdk_parent_close(s->hd); + bdrv_delete(s->hd); } static void vmdk_flush(BlockDriverState *bs) @@ -820,14 +812,14 @@ static void vmdk_flush(BlockDriverState *bs) } BlockDriver bdrv_vmdk = { - "vmdk", - sizeof(BDRVVmdkState), - vmdk_probe, - vmdk_open, - vmdk_read, - vmdk_write, - vmdk_close, - vmdk_create, - vmdk_flush, - vmdk_is_allocated, + .format_name = "vmdk", + .instance_size = sizeof(BDRVVmdkState), + .bdrv_probe = vmdk_probe, + .bdrv_open = vmdk_open, + .bdrv_read = vmdk_read, + .bdrv_write = vmdk_write, + .bdrv_close = vmdk_close, + .bdrv_create = vmdk_create, + .bdrv_flush = vmdk_flush, + .bdrv_is_allocated = vmdk_is_allocated, };