vmdk.c (f7ad538e1ea130c8b6f3abb06ad6c856242c799e) | vmdk.c (4f6fd3491cf0f768b135ed2e242bd1d1d2a2efec) |
---|---|
1/* 2 * Block driver for the VMDK format 3 * 4 * Copyright (c) 2004 Fabrice Bellard 5 * Copyright (c) 2005 Filip Navara 6 * 7 * Permission is hereby granted, free of charge, to any person obtaining a copy 8 * of this software and associated documentation files (the "Software"), to deal --- 202 unchanged lines hidden (view full) --- 211 VmdkExtent *e; 212 213 for (i = 0; i < s->num_extents; i++) { 214 e = &s->extents[i]; 215 g_free(e->l1_table); 216 g_free(e->l2_cache); 217 g_free(e->l1_backup_table); 218 if (e->file != bs->file) { | 1/* 2 * Block driver for the VMDK format 3 * 4 * Copyright (c) 2004 Fabrice Bellard 5 * Copyright (c) 2005 Filip Navara 6 * 7 * Permission is hereby granted, free of charge, to any person obtaining a copy 8 * of this software and associated documentation files (the "Software"), to deal --- 202 unchanged lines hidden (view full) --- 211 VmdkExtent *e; 212 213 for (i = 0; i < s->num_extents; i++) { 214 e = &s->extents[i]; 215 g_free(e->l1_table); 216 g_free(e->l2_cache); 217 g_free(e->l1_backup_table); 218 if (e->file != bs->file) { |
219 bdrv_delete(e->file); | 219 bdrv_unref(e->file); |
220 } 221 } 222 g_free(s->extents); 223} 224 225static void vmdk_free_last_extent(BlockDriverState *bs) 226{ 227 BDRVVmdkState *s = bs->opaque; --- 513 unchanged lines hidden (view full) --- 741 if (ret < 0) { 742 return ret; 743 } 744 extent->flat_start_offset = flat_offset << 9; 745 } else if (!strcmp(type, "SPARSE") || !strcmp(type, "VMFSSPARSE")) { 746 /* SPARSE extent and VMFSSPARSE extent are both "COWD" sparse file*/ 747 ret = vmdk_open_sparse(bs, extent_file, bs->open_flags); 748 if (ret) { | 220 } 221 } 222 g_free(s->extents); 223} 224 225static void vmdk_free_last_extent(BlockDriverState *bs) 226{ 227 BDRVVmdkState *s = bs->opaque; --- 513 unchanged lines hidden (view full) --- 741 if (ret < 0) { 742 return ret; 743 } 744 extent->flat_start_offset = flat_offset << 9; 745 } else if (!strcmp(type, "SPARSE") || !strcmp(type, "VMFSSPARSE")) { 746 /* SPARSE extent and VMFSSPARSE extent are both "COWD" sparse file*/ 747 ret = vmdk_open_sparse(bs, extent_file, bs->open_flags); 748 if (ret) { |
749 bdrv_delete(extent_file); | 749 bdrv_unref(extent_file); |
750 return ret; 751 } 752 } else { 753 fprintf(stderr, 754 "VMDK: Not supported extent type \"%s\""".\n", type); 755 return -ENOTSUP; 756 } 757next_line: --- 873 unchanged lines hidden (view full) --- 1631 if (flat && backing_file) { 1632 /* not supporting backing file for flat image */ 1633 return -ENOTSUP; 1634 } 1635 if (backing_file) { 1636 BlockDriverState *bs = bdrv_new(""); 1637 ret = bdrv_open(bs, backing_file, NULL, 0, NULL); 1638 if (ret != 0) { | 750 return ret; 751 } 752 } else { 753 fprintf(stderr, 754 "VMDK: Not supported extent type \"%s\""".\n", type); 755 return -ENOTSUP; 756 } 757next_line: --- 873 unchanged lines hidden (view full) --- 1631 if (flat && backing_file) { 1632 /* not supporting backing file for flat image */ 1633 return -ENOTSUP; 1634 } 1635 if (backing_file) { 1636 BlockDriverState *bs = bdrv_new(""); 1637 ret = bdrv_open(bs, backing_file, NULL, 0, NULL); 1638 if (ret != 0) { |
1639 bdrv_delete(bs); | 1639 bdrv_unref(bs); |
1640 return ret; 1641 } 1642 if (strcmp(bs->drv->format_name, "vmdk")) { | 1640 return ret; 1641 } 1642 if (strcmp(bs->drv->format_name, "vmdk")) { |
1643 bdrv_delete(bs); | 1643 bdrv_unref(bs); |
1644 return -EINVAL; 1645 } 1646 parent_cid = vmdk_read_cid(bs, 0); | 1644 return -EINVAL; 1645 } 1646 parent_cid = vmdk_read_cid(bs, 0); |
1647 bdrv_delete(bs); | 1647 bdrv_unref(bs); |
1648 snprintf(parent_desc_line, sizeof(parent_desc_line), 1649 "parentFileNameHint=\"%s\"", backing_file); 1650 } 1651 1652 /* Create extents */ 1653 filesize = total_size; 1654 while (filesize > 0) { 1655 char desc_line[BUF_SIZE]; --- 197 unchanged lines hidden --- | 1648 snprintf(parent_desc_line, sizeof(parent_desc_line), 1649 "parentFileNameHint=\"%s\"", backing_file); 1650 } 1651 1652 /* Create extents */ 1653 filesize = total_size; 1654 while (filesize > 0) { 1655 char desc_line[BUF_SIZE]; --- 197 unchanged lines hidden --- |