提交 3545cbef 编写于 作者: E Erik Skultety

util: mdev: Introduce virMediatedDeviceTypeReadAttrs getter

This should serve as a replacement for the existing udevFillMdevType
which is responsible for fetching the device type's attributes from the
sysfs interface. The problem with the existing solution is that it's
tied to the udev backend.
Signed-off-by: NErik Skultety <eskultet@redhat.com>
上级 c3faa92a
......@@ -2182,6 +2182,7 @@ virMediatedDeviceModelTypeToString;
virMediatedDeviceNew;
virMediatedDeviceSetUsedBy;
virMediatedDeviceTypeFree;
virMediatedDeviceTypeReadAttrs;
......
......@@ -496,3 +496,37 @@ virMediatedDeviceTypeFree(virMediatedDeviceTypePtr type)
VIR_FREE(type->device_api);
VIR_FREE(type);
}
int
virMediatedDeviceTypeReadAttrs(const char *sysfspath,
virMediatedDeviceTypePtr *type)
{
int ret = -1;
virMediatedDeviceTypePtr tmp = NULL;
#define MDEV_GET_SYSFS_ATTR(attr, dst, cb) \
do { \
if (cb(dst, "%s/%s", sysfspath, attr) < 0) \
goto cleanup; \
} while (0)
if (VIR_ALLOC(tmp) < 0)
goto cleanup;
if (VIR_STRDUP(tmp->id, last_component(sysfspath)) < 0)
goto cleanup;
MDEV_GET_SYSFS_ATTR("name", &tmp->name, virFileReadValueString);
MDEV_GET_SYSFS_ATTR("device_api", &tmp->device_api, virFileReadValueString);
MDEV_GET_SYSFS_ATTR("available_instances", &tmp->available_instances,
virFileReadValueUint);
#undef MDEV_GET_SYSFS_ATTR
VIR_STEAL_PTR(*type, tmp);
ret = 0;
cleanup:
virMediatedDeviceTypeFree(tmp);
return ret;
}
......@@ -129,4 +129,9 @@ virMediatedDeviceListMarkDevices(virMediatedDeviceListPtr dst,
void
virMediatedDeviceTypeFree(virMediatedDeviceTypePtr type);
int
virMediatedDeviceTypeReadAttrs(const char *sysfspath,
virMediatedDeviceTypePtr *type);
#endif /* __VIR_MDEV_H__ */
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册