Revision f8b6cc00 hw/qdev-properties.c

b/hw/qdev-properties.c
305 305

  
306 306
static int parse_drive(DeviceState *dev, Property *prop, const char *str)
307 307
{
308
    DriveInfo **ptr = qdev_get_prop_ptr(dev, prop);
308
    BlockDriverState **ptr = qdev_get_prop_ptr(dev, prop);
309
    BlockDriverState *bs;
309 310

  
310
    *ptr = drive_get_by_id(str);
311
    if (*ptr == NULL)
311
    bs = bdrv_find(str);
312
    if (bs == NULL)
312 313
        return -ENOENT;
314
    *ptr = bs;
313 315
    return 0;
314 316
}
315 317

  
316 318
static void free_drive(DeviceState *dev, Property *prop)
317 319
{
318
    DriveInfo **ptr = qdev_get_prop_ptr(dev, prop);
320
    BlockDriverState **ptr = qdev_get_prop_ptr(dev, prop);
319 321

  
320 322
    if (*ptr) {
321
        blockdev_auto_del((*ptr)->bdrv);
323
        blockdev_auto_del(*ptr);
322 324
    }
323 325
}
324 326

  
325 327
static int print_drive(DeviceState *dev, Property *prop, char *dest, size_t len)
326 328
{
327
    DriveInfo **ptr = qdev_get_prop_ptr(dev, prop);
328
    return snprintf(dest, len, "%s", (*ptr) ? (*ptr)->id : "<null>");
329
    BlockDriverState **ptr = qdev_get_prop_ptr(dev, prop);
330
    return snprintf(dest, len, "%s",
331
                    *ptr ? bdrv_get_device_name(*ptr) : "<null>");
329 332
}
330 333

  
331 334
PropertyInfo qdev_prop_drive = {
332 335
    .name  = "drive",
333 336
    .type  = PROP_TYPE_DRIVE,
334
    .size  = sizeof(DriveInfo*),
337
    .size  = sizeof(BlockDriverState *),
335 338
    .parse = parse_drive,
336 339
    .print = print_drive,
337 340
    .free  = free_drive,
......
657 660
    qdev_prop_set(dev, name, &value, PROP_TYPE_STRING);
658 661
}
659 662

  
660
void qdev_prop_set_drive(DeviceState *dev, const char *name, DriveInfo *value)
663
void qdev_prop_set_drive(DeviceState *dev, const char *name, BlockDriverState *value)
661 664
{
662 665
    qdev_prop_set(dev, name, &value, PROP_TYPE_DRIVE);
663 666
}

Also available in: Unified diff