drm: Relax drm file detection, support FreeBSD

Path check was done on /dev/dri/card and /dev/dri/renderD. However,
/dev/dri/by-path is a thing, and on FreeBSD, /dev/dri/ symlinks to
/dev/drm/.

Relax Linux check to /dev/dri/, and add FreeBSD check for /dev/drm/.
This commit is contained in:
Kenny Levinsen 2020-09-22 00:49:04 +02:00
parent 6da52fff23
commit a763e16f26

View file

@ -24,24 +24,22 @@ int drm_drop_master(int fd) {
return ioctl(fd, DRM_IOCTL_DROP_MASTER, 0); return ioctl(fd, DRM_IOCTL_DROP_MASTER, 0);
} }
static int path_is_drm_card(const char *path) {
static const char prefix[] = "/dev/dri/card";
static const int prefixlen = STRLEN(prefix);
return strncmp(prefix, path, prefixlen) == 0;
}
static int path_is_drm_render(const char *path) {
static const char prefix[] = "/dev/dri/renderD";
static const int prefixlen = STRLEN(prefix);
return strncmp(prefix, path, prefixlen) == 0;
}
int path_is_drm(const char *path) {
return path_is_drm_card(path) || path_is_drm_render(path);
}
#if defined(__linux__) #if defined(__linux__)
int path_is_drm(const char *path) {
static const char prefix[] = "/dev/dri/";
static const int prefixlen = STRLEN(prefix);
return strncmp(prefix, path, prefixlen) == 0;
}
int dev_is_drm(dev_t device) { int dev_is_drm(dev_t device) {
return major(device) == 226; return major(device) == 226;
} }
#elif defined(__FreeBSD__)
int path_is_drm(const char *path) {
static const char prefix[] = "/dev/drm/";
static const int prefixlen = STRLEN(prefix);
return strncmp(prefix, path, prefixlen) == 0;
}
#else
#error Unsupported platform
#endif #endif