Revision 18846dee hw/qdev-properties.c
b/hw/qdev-properties.c | ||
---|---|---|
311 | 311 |
bs = bdrv_find(str); |
312 | 312 |
if (bs == NULL) |
313 | 313 |
return -ENOENT; |
314 |
if (bdrv_attach(bs, dev) < 0) |
|
315 |
return -EEXIST; |
|
314 | 316 |
*ptr = bs; |
315 | 317 |
return 0; |
316 | 318 |
} |
... | ... | |
320 | 322 |
BlockDriverState **ptr = qdev_get_prop_ptr(dev, prop); |
321 | 323 |
|
322 | 324 |
if (*ptr) { |
325 |
bdrv_detach(*ptr, dev); |
|
323 | 326 |
blockdev_auto_del(*ptr); |
324 | 327 |
} |
325 | 328 |
} |
... | ... | |
660 | 663 |
qdev_prop_set(dev, name, &value, PROP_TYPE_STRING); |
661 | 664 |
} |
662 | 665 |
|
663 |
void qdev_prop_set_drive(DeviceState *dev, const char *name, BlockDriverState *value)
|
|
666 |
int qdev_prop_set_drive(DeviceState *dev, const char *name, BlockDriverState *value)
|
|
664 | 667 |
{ |
668 |
int res; |
|
669 |
|
|
670 |
res = bdrv_attach(value, dev); |
|
671 |
if (res < 0) { |
|
672 |
error_report("Can't attach drive %s to %s.%s: %s", |
|
673 |
bdrv_get_device_name(value), |
|
674 |
dev->id ? dev->id : dev->info->name, |
|
675 |
name, strerror(-res)); |
|
676 |
return -1; |
|
677 |
} |
|
665 | 678 |
qdev_prop_set(dev, name, &value, PROP_TYPE_DRIVE); |
679 |
return 0; |
|
666 | 680 |
} |
667 | 681 |
|
682 |
void qdev_prop_set_drive_nofail(DeviceState *dev, const char *name, BlockDriverState *value) |
|
683 |
{ |
|
684 |
if (qdev_prop_set_drive(dev, name, value) < 0) { |
|
685 |
exit(1); |
|
686 |
} |
|
687 |
} |
|
668 | 688 |
void qdev_prop_set_chr(DeviceState *dev, const char *name, CharDriverState *value) |
669 | 689 |
{ |
670 | 690 |
qdev_prop_set(dev, name, &value, PROP_TYPE_CHR); |
Also available in: Unified diff