KMSDRM: Only use OpenBSD-specific defines on pre-6.9 releases
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50
diff --git a/src/video/kmsdrm/SDL_kmsdrmvideo.c b/src/video/kmsdrm/SDL_kmsdrmvideo.c
index 31620f7..ee8451f 100644
--- a/src/video/kmsdrm/SDL_kmsdrmvideo.c
+++ b/src/video/kmsdrm/SDL_kmsdrmvideo.c
@@ -46,16 +46,19 @@
#include "SDL_kmsdrmdyn.h"
#include "SDL_kmsdrmvulkan.h"
#include <sys/stat.h>
+#include <sys/param.h>
+#include <sys/utsname.h>
#include <dirent.h>
#include <poll.h>
#include <errno.h>
#ifdef __OpenBSD__
-#define KMSDRM_DRI_PATH "/dev/"
-#define KMSDRM_DRI_DEVFMT "%sdrm%d"
-#define KMSDRM_DRI_DEVNAME "drm"
-#define KMSDRM_DRI_DEVNAMESIZE 3
-#define KMSDRM_DRI_CARDPATHFMT "/dev/drm%d"
+static SDL_bool openbsd69orgreater = SDL_FALSE;
+#define KMSDRM_DRI_PATH openbsd69orgreater ? "/dev/dri/" : "/dev/"
+#define KMSDRM_DRI_DEVFMT openbsd69orgreater ? "%scard%d" : "%sdrm%d"
+#define KMSDRM_DRI_DEVNAME openbsd69orgreater ? "card" : "drm"
+#define KMSDRM_DRI_DEVNAMESIZE openbsd69orgreater ? 4 : 3
+#define KMSDRM_DRI_CARDPATHFMT openbsd69orgreater ? "/dev/dri/card%d" : "/dev/drm%d"
#else
#define KMSDRM_DRI_PATH "/dev/dri/"
#define KMSDRM_DRI_DEVFMT "%scard%d"
@@ -182,8 +185,20 @@ get_driindex(void)
static int
KMSDRM_Available(void)
{
+#ifdef __OpenBSD__
+ struct utsname nameofsystem;
+ double releaseversion;
+#endif
int ret = -ENOENT;
+#ifdef __OpenBSD__
+ if (!(uname(&nameofsystem) < 0)) {
+ releaseversion = SDL_atof(nameofsystem.release);
+ if (releaseversion >= 6.9) {
+ openbsd69orgreater = SDL_TRUE;
+ }
+ }
+#endif
ret = get_driindex();
if (ret >= 0)
return 1;