aboutsummaryrefslogtreecommitdiff
path: root/tests/drmtest.c
diff options
context:
space:
mode:
authorEric Anholt <eric@anholt.net>2007-07-19 06:17:04 -0700
committerEric Anholt <eric@anholt.net>2007-07-19 06:17:41 -0700
commitecf3fbe599cd72c495acf339ae24f3a9e01fdb36 (patch)
treed3ffa3160b9c40e7cc318df4a6fecebfa8d3af75 /tests/drmtest.c
parent50cb405f93da70054ede29e0c365f06352dc8fe5 (diff)
Add a test for drawable add, remove, and update.
Diffstat (limited to 'tests/drmtest.c')
-rw-r--r--tests/drmtest.c38
1 files changed, 38 insertions, 0 deletions
diff --git a/tests/drmtest.c b/tests/drmtest.c
index 3697078a..cae99a0c 100644
--- a/tests/drmtest.c
+++ b/tests/drmtest.c
@@ -43,3 +43,41 @@ 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();
+}
+