Revision e1da9b24 block/vmdk.c

b/block/vmdk.c
81 81
} VmdkExtent;
82 82

  
83 83
typedef struct BDRVVmdkState {
84
    int desc_offset;
84 85
    uint32_t parent_cid;
85 86
    int num_extents;
86 87
    /* Extent array with num_extents entries, ascend ordered by address */
......
175 176
    uint32_t cid;
176 177
    const char *p_name, *cid_str;
177 178
    size_t cid_str_size;
179
    BDRVVmdkState *s = bs->opaque;
178 180

  
179
    /* the descriptor offset = 0x200 */
180
    if (bdrv_pread(bs->file, 0x200, desc, DESC_SIZE) != DESC_SIZE)
181
    if (bdrv_pread(bs->file, s->desc_offset, desc, DESC_SIZE) != DESC_SIZE) {
181 182
        return 0;
183
    }
182 184

  
183 185
    if (parent) {
184 186
        cid_str = "parentCID";
......
200 202
{
201 203
    char desc[DESC_SIZE], tmp_desc[DESC_SIZE];
202 204
    char *p_name, *tmp_str;
205
    BDRVVmdkState *s = bs->opaque;
203 206

  
204
    /* the descriptor offset = 0x200 */
205
    if (bdrv_pread(bs->file, 0x200, desc, DESC_SIZE) != DESC_SIZE)
206
        return -1;
207
    memset(desc, 0, sizeof(desc));
208
    if (bdrv_pread(bs->file, s->desc_offset, desc, DESC_SIZE) != DESC_SIZE) {
209
        return -EIO;
210
    }
207 211

  
208 212
    tmp_str = strstr(desc,"parentCID");
209 213
    pstrcpy(tmp_desc, sizeof(tmp_desc), tmp_str);
......
213 217
        pstrcat(desc, sizeof(desc), tmp_desc);
214 218
    }
215 219

  
216
    if (bdrv_pwrite_sync(bs->file, 0x200, desc, DESC_SIZE) < 0)
217
        return -1;
220
    if (bdrv_pwrite_sync(bs->file, s->desc_offset, desc, DESC_SIZE) < 0) {
221
        return -EIO;
222
    }
218 223
    return 0;
219 224
}
220 225

  
......
402 407
{
403 408
    char *p_name;
404 409
    char desc[DESC_SIZE];
410
    BDRVVmdkState *s = bs->opaque;
405 411

  
406
    /* the descriptor offset = 0x200 */
407
    if (bdrv_pread(bs->file, 0x200, desc, DESC_SIZE) != DESC_SIZE)
412
    if (bdrv_pread(bs->file, s->desc_offset, desc, DESC_SIZE) != DESC_SIZE) {
408 413
        return -1;
414
    }
409 415

  
410 416
    if ((p_name = strstr(desc,"parentFileNameHint")) != NULL) {
411 417
        char *end_name;
......
506 512
    int ret;
507 513
    uint32_t magic;
508 514
    VMDK3Header header;
515
    BDRVVmdkState *s = bs->opaque;
509 516
    VmdkExtent *extent;
510 517

  
518
    s->desc_offset = 0x200;
511 519
    ret = bdrv_pread(bs->file, sizeof(magic), &header, sizeof(header));
512 520
    if (ret < 0) {
513 521
        goto fail;
......
539 547
    BDRVVmdkState *s = bs->opaque;
540 548
    VmdkExtent *extent;
541 549

  
550
    s->desc_offset = 0x200;
542 551
    ret = bdrv_pread(bs->file, sizeof(magic), &header, sizeof(header));
543 552
    if (ret < 0) {
544 553
        goto fail;

Also available in: Unified diff