summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorThomas White <taw@bitwiz.org.uk>2009-05-02 20:01:56 +0100
committerThomas White <taw@bitwiz.org.uk>2009-05-02 20:01:56 +0100
commite422335ee7e950236c478eeefa1fc5cde90fd3aa (patch)
tree42779d17566d08e6980b36c9733353feb58b80c5
parent26353be0247589e048198ebcf841629540945bc9 (diff)
Move authentication to a common file
-rw-r--r--Makefile9
-rw-r--r--gdri-cmdq-submission.c54
-rw-r--r--utils.c86
-rw-r--r--utils.h35
4 files changed, 128 insertions, 56 deletions
diff --git a/Makefile b/Makefile
index 642a246..cc773d4 100644
--- a/Makefile
+++ b/Makefile
@@ -2,8 +2,8 @@ CFLAGS=-g -W -Wall
LIBS=-lX11 -lXext -ldrm
CC=gcc
-gdri-cmdq-submission: gdri-cmdq-submission.o dri2.o
- $(CC) gdri-cmdq-submission.o dri2.o -o gdri-cmdq-submission ${LIBS}
+gdri-cmdq-submission: gdri-cmdq-submission.o dri2.o utils.o
+ $(CC) gdri-cmdq-submission.o dri2.o utils.o -o gdri-cmdq-submission ${LIBS}
dri2.o: dri2.c
$(CC) -c ${CFLAGS} ${CROSS_CFLAGS} dri2.c -o dri2.o
@@ -11,8 +11,11 @@ dri2.o: dri2.c
gdri-cmdq-submission.o: gdri-cmdq-submission.c
$(CC) -c ${CFLAGS} ${CROSS_CFLAGS} gdri-cmdq-submission.c -o gdri-cmdq-submission.o
+utils.o: utils.c
+ $(CC) -c ${CFLAGS} ${CROSS_CFLAGS} utils.c -o utils.o
+
clean:
- rm -rf dri2.o gdri-cmdq-submission.o gdri-cmdq-submission
+ rm -rf dri2.o gdri-cmdq-submission.o utils.o gdri-cmdq-submission
install:
install -d -m 755 ${PREFIX}/bin
diff --git a/gdri-cmdq-submission.c b/gdri-cmdq-submission.c
index 40dfcc9..a78093b 100644
--- a/gdri-cmdq-submission.c
+++ b/gdri-cmdq-submission.c
@@ -23,14 +23,7 @@
#include <stdio.h>
#include <stdlib.h>
-#include <string.h>
-#include <errno.h>
-#include <unistd.h>
-#include <sys/types.h>
-#include <sys/stat.h>
-#include <fcntl.h>
#include <X11/Xlib.h>
-#include <X11/Xutil.h>
#include <X11/Xmd.h>
#include <stdint.h>
@@ -39,54 +32,9 @@
#include "dri2.h"
#include "glamo-regs.h"
+#include "utils.h"
-#define RING_LOCALS int __count = 0;
-#define OUT_REG(reg, val) cmds[__count++] = (reg); cmds[__count++] = (val);
-
-
-static int do_drm_authentication(Display *dpy)
-{
- int scrnum;
- Window root;
- char *driver;
- char *device;
- int fd;
- drm_magic_t magic;
-
- /* Get default screen, root window and default visual */
- scrnum = DefaultScreen(dpy);
- root = RootWindow(dpy, scrnum);
-
- /* Get device name */
- if ( !DRI2Connect(dpy, root, &driver, &device) ) {
- fprintf(stderr, "DRI2Connect failed\n");
- return -1;
- }
-
- /* Open DRM device */
- fd = open(device, O_RDWR);
- if ( fd < 0 ) {
- fprintf(stderr, "Couldn't open '%s': %s\n",
- device, strerror(errno));
- return -1;
- }
-
- /* Get an authentication token */
- if ( drmGetMagic(fd, &magic) ) {
- fprintf(stderr, "drmGetMagic failed\n");
- return -1;
- }
-
- /* Authenticate */
- if ( DRI2Authenticate(dpy, root, magic) == False ) {
- fprintf(stderr, "DRI2Authenticate failed\n");
- return -1;
- }
-
- return fd;
-}
-
int main()
{
Display *dpy;
diff --git a/utils.c b/utils.c
new file mode 100644
index 0000000..276e21c
--- /dev/null
+++ b/utils.c
@@ -0,0 +1,86 @@
+/*
+ * utils.c
+ *
+ * Common bits
+ *
+ * (c) 2009 Thomas White <taw@bitwiz.org.uk>
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ *
+ */
+
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <errno.h>
+#include <unistd.h>
+#include <sys/types.h>
+#include <sys/stat.h>
+#include <fcntl.h>
+#include <X11/Xlib.h>
+#include <X11/Xutil.h>
+
+#include <X11/Xmd.h>
+#include <stdint.h>
+#include <drm/drm.h>
+
+#include "dri2.h"
+
+
+#define RING_LOCALS int __count = 0;
+#define OUT_REG(reg, val) cmds[__count++] = (reg); cmds[__count++] = (val);
+
+
+int do_drm_authentication(Display *dpy)
+{
+ int scrnum;
+ Window root;
+ char *driver;
+ char *device;
+ int fd;
+ drm_magic_t magic;
+
+ /* Get default screen, root window and default visual */
+ scrnum = DefaultScreen(dpy);
+ root = RootWindow(dpy, scrnum);
+
+ /* Get device name */
+ if ( !DRI2Connect(dpy, root, &driver, &device) ) {
+ fprintf(stderr, "DRI2Connect failed\n");
+ return -1;
+ }
+
+ /* Open DRM device */
+ fd = open(device, O_RDWR);
+ if ( fd < 0 ) {
+ fprintf(stderr, "Couldn't open '%s': %s\n",
+ device, strerror(errno));
+ return -1;
+ }
+
+ /* Get an authentication token */
+ if ( drmGetMagic(fd, &magic) ) {
+ fprintf(stderr, "drmGetMagic failed\n");
+ return -1;
+ }
+
+ /* Authenticate */
+ if ( DRI2Authenticate(dpy, root, magic) == False ) {
+ fprintf(stderr, "DRI2Authenticate failed\n");
+ return -1;
+ }
+
+ return fd;
+}
diff --git a/utils.h b/utils.h
new file mode 100644
index 0000000..0f19435
--- /dev/null
+++ b/utils.h
@@ -0,0 +1,35 @@
+/*
+ * utils.h
+ *
+ * Common bits
+ *
+ * (c) 2009 Thomas White <taw@bitwiz.org.uk>
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ *
+ */
+
+#ifndef UTILS_H
+#define UTILS_H
+
+
+#include <X11/Xmd.h>
+
+#define RING_LOCALS int __count = 0;
+#define OUT_REG(reg, val) cmds[__count++] = (reg); cmds[__count++] = (val);
+
+extern int do_drm_authentication(Display *dpy);
+
+
+#endif /* UTILS_H */