diff mbox

[libdrm,12/12] tests/drmdevice: add drm{Get, Free}Device() example

Message ID 1441819293-25567-13-git-send-email-emil.l.velikov@gmail.com (mailing list archive)
State New, archived
Headers show

Commit Message

Emil Velikov Sept. 9, 2015, 5:21 p.m. UTC
Signed-off-by: Emil Velikov <emil.l.velikov@gmail.com>
---
 tests/drmdevice.c | 23 +++++++++++++++++++++--
 1 file changed, 21 insertions(+), 2 deletions(-)
diff mbox

Patch

diff --git a/tests/drmdevice.c b/tests/drmdevice.c
index 4055f45..c336327 100644
--- a/tests/drmdevice.c
+++ b/tests/drmdevice.c
@@ -23,6 +23,9 @@ 
 
 #include <stdio.h>
 #include <stdlib.h>
+#include <sys/stat.h>
+#include <fcntl.h>
+#include <unistd.h>
 #include <xf86drm.h>
 
 
@@ -62,7 +65,8 @@  int
 main(void)
 {
     drmDevicePtr *devices;
-    int ret, max_devices;
+    drmDevicePtr device;
+    int fd, ret, max_devices;
 
     max_devices = drmGetDevices(NULL, 0);
 
@@ -84,9 +88,24 @@  main(void)
         return -1;
     }
 
-    for (int i = 0; i < ret; i++)
+    for (int i = 0; i < ret; i++) {
         print_device_info(devices[i], i);
 
+        for (int j = 0; j < DRM_NODE_MAX; j++) {
+            if (devices[i]->available_nodes & 1 << j) {
+                fd = open(devices[i]->nodes[j], O_RDONLY | O_CLOEXEC, 0);
+                if (fd < 0)
+                    continue;
+
+                if (drmGetDevice(fd, &device) == 0) {
+                    print_device_info(device, -1);
+                    drmFreeDevice(&device);
+                }
+                close(fd);
+            }
+        }
+    }
+
     drmFreeDevices(devices, ret);
     free(devices);
     return 0;