<text/>
</element>
</optional>
+ <ref name='blockData'/>
</element>
</define>
<element name='size'>
<ref name='unsignedLong'/>
</element>
+ <ref name='blockData'/>
+ </define>
+
+ <define name='blockData'>
+ <optional>
+ <element name='logical_block_size'>
+ <ref name='unsignedLong'/>
+ </element>
+ <element name='num_blocks'>
+ <ref name='unsignedLong'/>
+ </element>
+ </optional>
</define>
<define name='capdrm'>
<media_available>1</media_available>
<media_size>12345678</media_size>
<media_label>Windows_XP_Label</media_label>
+ <logical_block_size>2048</logical_block_size>
+ <num_blocks>6028</num_blocks>
</capability>
</capability>
</device>
char *actual = NULL;
int ret = -1;
virNodeDeviceDefPtr dev = NULL;
+ virNodeDevCapsDefPtr caps;
if (virTestLoadFile(xml, &xmlData) < 0)
goto fail;
if (!(dev = virNodeDeviceDefParseString(xmlData, EXISTING_DEVICE, NULL)))
goto fail;
+ /* Calculate some things that are not read in */
+ for (caps = dev->caps; caps; caps = caps->next) {
+ virNodeDevCapDataPtr data = &caps->data;
+
+ if (caps->data.type == VIR_NODE_DEV_CAP_STORAGE) {
+ if (data->storage.flags & VIR_NODE_DEV_CAP_STORAGE_REMOVABLE) {
+ if (data->storage.flags &
+ VIR_NODE_DEV_CAP_STORAGE_REMOVABLE_MEDIA_AVAILABLE) {
+ data->storage.logical_block_size = 2048;
+ data->storage.num_blocks =
+ data->storage.removable_media_size /
+ data->storage.logical_block_size;
+ }
+ } else {
+ data->storage.logical_block_size = 512;
+ data->storage.num_blocks = data->storage.size /
+ data->storage.logical_block_size;
+ }
+ }
+ }
+
if (!(actual = virNodeDeviceDefFormat(dev)))
goto fail;