Signed-off-by: Daniel Golle <daniel@makrotopia.org>lilik-openwrt-22.03
@ -0,0 +1,25 @@ | |||
--- a/src/libudev.c | |||
+++ b/src/libudev.c | |||
@@ -130,6 +130,12 @@ udev_device_get_devnum(struct udev_devic | |||
} | |||
char const * | |||
+udev_device_get_driver(struct udev_device *udev_device) | |||
+{ | |||
+ return NULL; | |||
+} | |||
+ | |||
+char const * | |||
udev_device_get_property_value(struct udev_device *dev, char const *property) | |||
{ | |||
LOG("udev_device_get_property_value %s\n", property); | |||
--- a/src/libudev.h | |||
+++ b/src/libudev.h | |||
@@ -30,6 +30,7 @@ struct udev_device *udev_device_new_from | |||
struct udev *udev, char const *syspath); | |||
struct udev_device *udev_device_new_from_devnum( | |||
struct udev *udev, char type, dev_t devnum); | |||
+char const *udev_device_get_driver(struct udev_device *udev_device); | |||
char const *udev_device_get_syspath(struct udev_device *udev_device); | |||
char const *udev_device_get_sysname(struct udev_device *udev_device); | |||
char const *udev_device_get_subsystem(struct udev_device *udev_device); |
@ -0,0 +1,72 @@ | |||
--- a/src/libudev.c | |||
+++ b/src/libudev.c | |||
@@ -26,6 +26,7 @@ struct udev_device { | |||
struct udev *udev; | |||
int refcount; | |||
char syspath[32]; | |||
+ char sysfspath[64]; | |||
dev_t devnum; | |||
char const *sysname; | |||
char const *action; | |||
@@ -115,6 +116,29 @@ udev_device_new_from_devnum(struct udev | |||
return NULL; | |||
} | |||
+struct udev_device * | |||
+udev_device_new_from_subsystem_sysname( | |||
+ struct udev *udev, const char *subsystem, const char *sysname) | |||
+{ | |||
+ struct udev_device *u; | |||
+ char sysfsname[64]; | |||
+ struct stat st; | |||
+ | |||
+ snprintf(sysfsname, sizeof(sysfsname), "/sys/bus/%s/devices/%s/", subsystem, sysname); | |||
+ if (stat(sysfsname, &st) == 0) | |||
+ { | |||
+ char sysfsdev[64]; | |||
+ u = calloc(1, sizeof(struct udev_device)); | |||
+ strncpy(u->sysfspath, sysfsname, sizeof(u->sysfspath)); | |||
+ | |||
+ return u; | |||
+ } | |||
+ else | |||
+ { | |||
+ return NULL; | |||
+ } | |||
+} | |||
+ | |||
char const * | |||
udev_device_get_devnode(struct udev_device *udev_device) | |||
{ | |||
@@ -132,6 +156,20 @@ udev_device_get_devnum(struct udev_devic | |||
char const * | |||
udev_device_get_driver(struct udev_device *udev_device) | |||
{ | |||
+ if (udev_device->sysfspath) | |||
+ { | |||
+ char driverlnp[64]; | |||
+ char driverlnk[32]; | |||
+ snprintf(driverlnp, sizeof(driverlnp), "%s/driver", | |||
+ udev_device->sysfspath); | |||
+ if (readlink(driverlnp, driverlnk, sizeof(driver))) | |||
+ { | |||
+ char *drivernm; | |||
+ drivernm = strrchr(driverlnk, '/'); | |||
+ if (drivernm) | |||
+ return ++drivernm; | |||
+ } | |||
+ } | |||
return NULL; | |||
} | |||
--- a/src/libudev.h | |||
+++ b/src/libudev.h | |||
@@ -30,6 +30,8 @@ struct udev_device *udev_device_new_from | |||
struct udev *udev, char const *syspath); | |||
struct udev_device *udev_device_new_from_devnum( | |||
struct udev *udev, char type, dev_t devnum); | |||
+struct udev_device *udev_device_new_from_subsystem_sysname( | |||
+ struct udev *udev, const char *subsystem, const char *sysname); | |||
char const *udev_device_get_driver(struct udev_device *udev_device); | |||
char const *udev_device_get_syspath(struct udev_device *udev_device); | |||
char const *udev_device_get_sysname(struct udev_device *udev_device); |
@ -0,0 +1,41 @@ | |||
--- a/src/libudev.c | |||
+++ b/src/libudev.c | |||
@@ -162,7 +162,7 @@ udev_device_get_driver(struct udev_devic | |||
char driverlnk[32]; | |||
snprintf(driverlnp, sizeof(driverlnp), "%s/driver", | |||
udev_device->sysfspath); | |||
- if (readlink(driverlnp, driverlnk, sizeof(driver))) | |||
+ if (readlink(driverlnp, driverlnk, sizeof(driverlnk))) | |||
{ | |||
char *drivernm; | |||
drivernm = strrchr(driverlnk, '/'); | |||
@@ -600,6 +600,18 @@ udev_enumerate_add_match_property(struct | |||
value); | |||
return -1; | |||
} | |||
+ | |||
+int | |||
+udev_enumerate_add_nomatch_sysattr(struct udev_enumerate *udev_enumerate, | |||
+ const char *sysattr, const char *value) | |||
+{ | |||
+ (void)udev_enumerate; | |||
+ (void)sysattr; | |||
+ (void)value; | |||
+ LOG("stub: udev_enumerate_add_nomatch_sysattr %s %s\n", sysattr, | |||
+ value); | |||
+ return -1; | |||
+} | |||
void | |||
udev_enumerate_unref(struct udev_enumerate *udev_enumerate) | |||
--- a/src/libudev.h | |||
+++ b/src/libudev.h | |||
@@ -59,6 +59,8 @@ int udev_enumerate_add_match_sysname( | |||
struct udev_enumerate *udev_enumerate, char const *sysname); | |||
int udev_enumerate_add_match_property(struct udev_enumerate *udev_enumerate, | |||
char const *property, char const *value); | |||
+int udev_enumerate_add_nomatch_sysattr(struct udev_enumerate *udev_enumerate, | |||
+ const char *sysattr, const char *value); | |||
void udev_enumerate_unref(struct udev_enumerate *udev_enumerate); | |||
#define udev_list_entry_foreach(list_entry, first_entry) \ |