diff options
author | Vasyl Vavrychuk <vasyl.vavrychuk@opensynergy.com> | 2020-01-29 03:54:56 +0100 |
---|---|---|
committer | Kristian H. Kristensen <hoegsberg@gmail.com> | 2020-02-24 21:53:41 +0000 |
commit | c4eae71d7e44df2c1f89fb3460b1f7f8feaff0df (patch) | |
tree | ec488391cb2ac42c8a7ebd0efb6f5d12e194d06b | |
parent | 2c0a01261d35ae7be9d4de180884ce3f2900a07e (diff) | |
download | external_libdrm-c4eae71d7e44df2c1f89fb3460b1f7f8feaff0df.tar.gz external_libdrm-c4eae71d7e44df2c1f89fb3460b1f7f8feaff0df.tar.bz2 external_libdrm-c4eae71d7e44df2c1f89fb3460b1f7f8feaff0df.zip |
xf86drm: generalize the device subsystem type parsing code
Move the code, which used to get the device subsystem type from a device
path in sysfs, to a separate function to be reusable.
Signed-off-by: Vasyl Vavrychuk <vasyl.vavrychuk@opensynergy.com>
Signed-off-by: Mikhail Golubev <Mikhail.Golubev@opensynergy.com>
Reviewed-by: Gurchetan Singh <gurchetansingh@chromium.org>
Tested-by: Gurchetan Singh <gurchetansingh@chromium.org>
-rw-r--r-- | xf86drm.c | 21 |
1 files changed, 16 insertions, 5 deletions
@@ -2964,10 +2964,10 @@ sysfs_uevent_get(const char *path, const char *fmt, ...) /* Little white lie to avoid major rework of the existing code */ #define DRM_BUS_VIRTIO 0x10 -static int drmParseSubsystemType(int maj, int min) -{ #ifdef __linux__ - char path[PATH_MAX + 1]; +static int get_subsystem_type(const char *device_path) +{ + char path[PATH_MAX + 1] = ""; char link[PATH_MAX + 1] = ""; char *name; struct { @@ -2982,8 +2982,8 @@ static int drmParseSubsystemType(int maj, int min) { "/virtio", DRM_BUS_VIRTIO }, }; - snprintf(path, PATH_MAX, "/sys/dev/char/%d:%d/device/subsystem", - maj, min); + strncpy(path, device_path, PATH_MAX); + strncat(path, "/subsystem", PATH_MAX); if (readlink(path, link, PATH_MAX) < 0) return -errno; @@ -2998,6 +2998,17 @@ static int drmParseSubsystemType(int maj, int min) } return -EINVAL; +} +#endif + +static int drmParseSubsystemType(int maj, int min) +{ +#ifdef __linux__ + char path[PATH_MAX + 1] = ""; + + snprintf(path, PATH_MAX, "/sys/dev/char/%d:%d/device", maj, min); + + return get_subsystem_type(path); #elif defined(__OpenBSD__) || defined(__DragonFly__) return DRM_BUS_PCI; #else |