aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorVasyl Vavrychuk <vasyl.vavrychuk@opensynergy.com>2020-01-29 03:54:56 +0100
committerKristian H. Kristensen <hoegsberg@gmail.com>2020-02-24 21:53:41 +0000
commitc4eae71d7e44df2c1f89fb3460b1f7f8feaff0df (patch)
treeec488391cb2ac42c8a7ebd0efb6f5d12e194d06b
parent2c0a01261d35ae7be9d4de180884ce3f2900a07e (diff)
downloadexternal_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.c21
1 files changed, 16 insertions, 5 deletions
diff --git a/xf86drm.c b/xf86drm.c
index 7ae41c37..b1479128 100644
--- a/xf86drm.c
+++ b/xf86drm.c
@@ -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