mirror of
https://gitlab.com/libvirt/libvirt.git
synced 2025-02-22 03:12:22 +00:00
util: add ccw device address parsing into virccw
Add virCCWDeviceAddressParseFromString and use it in nodedev udev. Signed-off-by: Boris Fiuczynski <fiuczy@linux.ibm.com> Reviewed-by: Michal Privoznik <mprivozn@redhat.com>
This commit is contained in:
parent
2d9fd19bf5
commit
8d52f99f0b
@ -1928,6 +1928,7 @@ virCCWDeviceAddressAsString;
|
||||
virCCWDeviceAddressEqual;
|
||||
virCCWDeviceAddressIncrement;
|
||||
virCCWDeviceAddressIsValid;
|
||||
virCCWDeviceAddressParseFromString;
|
||||
|
||||
|
||||
# util/vircgroup.h
|
||||
|
@ -36,6 +36,7 @@
|
||||
#include "viruuid.h"
|
||||
#include "virbuffer.h"
|
||||
#include "virfile.h"
|
||||
#include "virccw.h"
|
||||
#include "virpci.h"
|
||||
#include "virpidfile.h"
|
||||
#include "virstring.h"
|
||||
@ -1086,9 +1087,10 @@ udevGetCCWAddress(const char *sysfs_path,
|
||||
char *p;
|
||||
|
||||
if ((p = strrchr(sysfs_path, '/')) == NULL ||
|
||||
virStrToLong_ui(p + 1, &p, 16, &data->ccw_dev.cssid) < 0 || p == NULL ||
|
||||
virStrToLong_ui(p + 1, &p, 16, &data->ccw_dev.ssid) < 0 || p == NULL ||
|
||||
virStrToLong_ui(p + 1, &p, 16, &data->ccw_dev.devno) < 0) {
|
||||
virCCWDeviceAddressParseFromString(p + 1,
|
||||
&data->ccw_dev.cssid,
|
||||
&data->ccw_dev.ssid,
|
||||
&data->ccw_dev.devno) < 0) {
|
||||
virReportError(VIR_ERR_INTERNAL_ERROR,
|
||||
_("failed to parse the CCW address from sysfs path: '%s'"),
|
||||
sysfs_path);
|
||||
|
@ -20,6 +20,7 @@
|
||||
|
||||
#include <config.h>
|
||||
#include "virccw.h"
|
||||
#include "virstring.h"
|
||||
|
||||
|
||||
bool
|
||||
@ -60,3 +61,20 @@ virCCWDeviceAddressIncrement(virCCWDeviceAddress *addr)
|
||||
*addr = ccwaddr;
|
||||
return 0;
|
||||
}
|
||||
|
||||
int
|
||||
virCCWDeviceAddressParseFromString(const char *address,
|
||||
unsigned int *cssid,
|
||||
unsigned int *ssid,
|
||||
unsigned int *devno)
|
||||
{
|
||||
char *p;
|
||||
|
||||
if (address == NULL || virStrToLong_ui(address, &p, 16, cssid) < 0 ||
|
||||
p == NULL || virStrToLong_ui(p + 1, &p, 16, ssid) < 0 ||
|
||||
p == NULL || virStrToLong_ui(p + 1, &p, 16, devno) < 0) {
|
||||
return -1;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
@ -42,3 +42,8 @@ bool virCCWDeviceAddressEqual(virCCWDeviceAddress *addr1,
|
||||
char* virCCWDeviceAddressAsString(virCCWDeviceAddress *addr)
|
||||
ATTRIBUTE_NONNULL(1);
|
||||
int virCCWDeviceAddressIncrement(virCCWDeviceAddress *addr);
|
||||
|
||||
int virCCWDeviceAddressParseFromString(const char *address,
|
||||
unsigned int *cssid,
|
||||
unsigned int *ssid,
|
||||
unsigned int *devno);
|
||||
|
Loading…
x
Reference in New Issue
Block a user