xz: Compile with PIC to fix linking errors
[feed/packages.git] / libs / libudev-fbsd / patches / 101-add-stub-udev_device_new_from_subsystem_sysname.patch
1 --- a/src/libudev.c
2 +++ b/src/libudev.c
3 @@ -26,6 +26,7 @@ struct udev_device {
4 struct udev *udev;
5 int refcount;
6 char syspath[32];
7 + char sysfspath[64];
8 dev_t devnum;
9 char const *sysname;
10 char const *action;
11 @@ -115,6 +116,29 @@ udev_device_new_from_devnum(struct udev
12 return NULL;
13 }
14
15 +struct udev_device *
16 +udev_device_new_from_subsystem_sysname(
17 + struct udev *udev, const char *subsystem, const char *sysname)
18 +{
19 + struct udev_device *u;
20 + char sysfsname[64];
21 + struct stat st;
22 +
23 + snprintf(sysfsname, sizeof(sysfsname), "/sys/bus/%s/devices/%s/", subsystem, sysname);
24 + if (stat(sysfsname, &st) == 0)
25 + {
26 + char sysfsdev[64];
27 + u = calloc(1, sizeof(struct udev_device));
28 + strncpy(u->sysfspath, sysfsname, sizeof(u->sysfspath));
29 +
30 + return u;
31 + }
32 + else
33 + {
34 + return NULL;
35 + }
36 +}
37 +
38 char const *
39 udev_device_get_devnode(struct udev_device *udev_device)
40 {
41 @@ -132,6 +156,20 @@ udev_device_get_devnum(struct udev_devic
42 char const *
43 udev_device_get_driver(struct udev_device *udev_device)
44 {
45 + if (udev_device->sysfspath)
46 + {
47 + char driverlnp[64];
48 + char driverlnk[32];
49 + snprintf(driverlnp, sizeof(driverlnp), "%s/driver",
50 + udev_device->sysfspath);
51 + if (readlink(driverlnp, driverlnk, sizeof(driver)))
52 + {
53 + char *drivernm;
54 + drivernm = strrchr(driverlnk, '/');
55 + if (drivernm)
56 + return ++drivernm;
57 + }
58 + }
59 return NULL;
60 }
61
62 --- a/src/libudev.h
63 +++ b/src/libudev.h
64 @@ -30,6 +30,8 @@ struct udev_device *udev_device_new_from
65 struct udev *udev, char const *syspath);
66 struct udev_device *udev_device_new_from_devnum(
67 struct udev *udev, char type, dev_t devnum);
68 +struct udev_device *udev_device_new_from_subsystem_sysname(
69 + struct udev *udev, const char *subsystem, const char *sysname);
70 char const *udev_device_get_driver(struct udev_device *udev_device);
71 char const *udev_device_get_syspath(struct udev_device *udev_device);
72 char const *udev_device_get_sysname(struct udev_device *udev_device);