mirror of
https://github.com/systemd/systemd.git
synced 2025-01-26 14:04:03 +03:00
libudev: udev_device - read "driver" value
This commit is contained in:
parent
9b3a33a9ff
commit
95d90c4fe0
@ -346,8 +346,15 @@ int udev_device_get_properties(struct udev_device *udev_device,
|
||||
|
||||
const char *udev_device_get_driver(struct udev_device *udev_device)
|
||||
{
|
||||
char driver[NAME_SIZE];
|
||||
|
||||
if (udev_device == NULL)
|
||||
return NULL;
|
||||
if (udev_device->driver != NULL)
|
||||
return udev_device->driver;
|
||||
if (util_get_sys_driver(udev_device->udev, udev_device->devpath, driver, sizeof(driver)) < 2)
|
||||
return NULL;
|
||||
udev_device->driver = strdup(driver);
|
||||
return udev_device->driver;
|
||||
}
|
||||
|
||||
|
@ -99,4 +99,5 @@ extern int udev_ctrl_get_set_max_childs(struct udev_ctrl_msg *ctrl_msg);
|
||||
|
||||
/* libudev-utils */
|
||||
extern ssize_t util_get_sys_subsystem(struct udev *udev, const char *devpath, char *subsystem, size_t size);
|
||||
extern ssize_t util_get_sys_driver(struct udev *udev, const char *devpath, char *driver, size_t size);
|
||||
#endif
|
||||
|
@ -32,7 +32,7 @@
|
||||
#include "libudev-private.h"
|
||||
#include "../udev.h"
|
||||
|
||||
ssize_t util_get_sys_subsystem(struct udev *udev, const char *devpath, char *subsystem, size_t size)
|
||||
static ssize_t get_sys_link(struct udev *udev, const char *slink, const char *devpath, char *subsystem, size_t size)
|
||||
{
|
||||
char path[PATH_SIZE];
|
||||
ssize_t len;
|
||||
@ -40,7 +40,8 @@ ssize_t util_get_sys_subsystem(struct udev *udev, const char *devpath, char *sub
|
||||
|
||||
strlcpy(path, udev_get_sys_path(udev), sizeof(path));
|
||||
strlcat(path, devpath, sizeof(path));
|
||||
strlcat(path, "/subsystem", sizeof(path));
|
||||
strlcat(path, "/", sizeof(path));
|
||||
strlcat(path, slink, sizeof(path));
|
||||
len = readlink(path, path, sizeof(path));
|
||||
if (len < 0 || len >= (ssize_t) sizeof(path))
|
||||
return -1;
|
||||
@ -51,3 +52,14 @@ ssize_t util_get_sys_subsystem(struct udev *udev, const char *devpath, char *sub
|
||||
pos = &pos[1];
|
||||
return strlcpy(subsystem, pos, size);
|
||||
}
|
||||
|
||||
ssize_t util_get_sys_subsystem(struct udev *udev, const char *devpath, char *subsystem, size_t size)
|
||||
{
|
||||
return get_sys_link(udev, "subsystem", devpath, subsystem, size);
|
||||
}
|
||||
|
||||
ssize_t util_get_sys_driver(struct udev *udev, const char *devpath, char *driver, size_t size)
|
||||
{
|
||||
return get_sys_link(udev, "driver", devpath, driver, size);
|
||||
}
|
||||
|
||||
|
@ -58,6 +58,8 @@ static void print_device(struct udev_device *device)
|
||||
printf("devpath: '%s'\n", str);
|
||||
str = udev_device_get_subsystem(device);
|
||||
printf("subsystem: '%s'\n", str);
|
||||
str = udev_device_get_driver(device);
|
||||
printf("driver: '%s'\n", str);
|
||||
str = udev_device_get_syspath(device);
|
||||
printf("syspath: '%s'\n", str);
|
||||
str = udev_device_get_devname(device);
|
||||
|
Loading…
x
Reference in New Issue
Block a user