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