NV50: s/FALSE/false/
[platform/upstream/libdrm.git] / tests / drmtest.c
index 3697078..5453b10 100644 (file)
@@ -26,6 +26,7 @@
  */
 
 #include <fcntl.h>
+#include <sys/stat.h>
 #include "drmtest.h"
 
 /** Open the first DRM device we can find, searching up to 16 device nodes */
@@ -43,3 +44,40 @@ int drm_open_any(void)
        abort();
 }
 
+
+/**
+ * Open the first DRM device we can find where we end up being the master.
+ */
+int drm_open_any_master(void)
+{
+       char name[20];
+       int i, fd;
+
+       for (i = 0; i < 16; i++) {
+               drm_client_t client;
+               int ret;
+
+               sprintf(name, "/dev/dri/card%d", i);
+               fd = open(name, O_RDWR);
+               if (fd == -1)
+                       continue;
+
+               /* Check that we're the only opener and authed. */
+               client.idx = 0;
+               ret = ioctl(fd, DRM_IOCTL_GET_CLIENT, &client);
+               assert (ret == 0);
+               if (!client.auth) {
+                       close(fd);
+                       continue;
+               }
+               client.idx = 1;
+               ret = ioctl(fd, DRM_IOCTL_GET_CLIENT, &client);
+               if (ret != -1 || errno != EINVAL) {
+                       close(fd);
+                       continue;
+               }
+               return fd;
+       }
+       fprintf(stderr, "Couldn't find an un-controlled DRM device\n");
+       abort();
+}