]> git.pld-linux.org Git - packages/libdrm.git/blame - libdrm-2.4.0-no-freaking-mknod.patch
- up to 2.4.4
[packages/libdrm.git] / libdrm-2.4.0-no-freaking-mknod.patch
CommitLineData
d24f563e
TP
1diff -up libdrm-2.4.0/libdrm/xf86drm.c.mknod libdrm-2.4.0/libdrm/xf86drm.c
2--- libdrm-2.4.0/libdrm/xf86drm.c.mknod 2007-10-30 20:10:10.000000000 -0400
3+++ libdrm-2.4.0/libdrm/xf86drm.c 2007-11-12 19:26:12.000000000 -0500
4@@ -266,64 +266,12 @@ static int drmMatchBusID(const char *id1
5 */
6 static int drmOpenDevice(long dev, int minor)
7 {
8- stat_t st;
9 char buf[64];
10 int fd;
11- mode_t devmode = DRM_DEV_MODE, serv_mode;
12- int isroot = !geteuid();
13- uid_t user = DRM_DEV_UID;
14- gid_t group = DRM_DEV_GID, serv_group;
15
16 sprintf(buf, DRM_DEV_NAME, DRM_DIR_NAME, minor);
17 drmMsg("drmOpenDevice: node name is %s\n", buf);
18
19- if (drm_server_info) {
20- drm_server_info->get_perms(&serv_group, &serv_mode);
21- devmode = serv_mode ? serv_mode : DRM_DEV_MODE;
22- devmode &= ~(S_IXUSR|S_IXGRP|S_IXOTH);
23- group = (serv_group >= 0) ? serv_group : DRM_DEV_GID;
24- }
25-
26- if (stat(DRM_DIR_NAME, &st)) {
27- if (!isroot)
28- return DRM_ERR_NOT_ROOT;
29- mkdir(DRM_DIR_NAME, DRM_DEV_DIRMODE);
30- chown(DRM_DIR_NAME, 0, 0); /* root:root */
31- chmod(DRM_DIR_NAME, DRM_DEV_DIRMODE);
32- }
33-
34- /* Check if the device node exists and create it if necessary. */
35- if (stat(buf, &st)) {
36- if (!isroot)
37- return DRM_ERR_NOT_ROOT;
38- remove(buf);
39- mknod(buf, S_IFCHR | devmode, dev);
40- }
41-
42- if (drm_server_info) {
43- chown(buf, user, group);
44- chmod(buf, devmode);
45- }
46-
47- fd = open(buf, O_RDWR, 0);
48- drmMsg("drmOpenDevice: open result is %d, (%s)\n",
49- fd, fd < 0 ? strerror(errno) : "OK");
50- if (fd >= 0)
51- return fd;
52-
53- /* Check if the device node is not what we expect it to be, and recreate it
54- * and try again if so.
55- */
56- if (st.st_rdev != dev) {
57- if (!isroot)
58- return DRM_ERR_NOT_ROOT;
59- remove(buf);
60- mknod(buf, S_IFCHR | devmode, dev);
61- if (drm_server_info) {
62- chown(buf, user, group);
63- chmod(buf, devmode);
64- }
65- }
66 fd = open(buf, O_RDWR, 0);
67 drmMsg("drmOpenDevice: open result is %d, (%s)\n",
68 fd, fd < 0 ? strerror(errno) : "OK");
69@@ -331,7 +279,6 @@ static int drmOpenDevice(long dev, int m
70 return fd;
71
72 drmMsg("drmOpenDevice: Open failed\n");
73- remove(buf);
74 return -errno;
75 }
76
77diff -up libdrm-2.4.0/libdrm/xf86drm.h.mknod libdrm-2.4.0/libdrm/xf86drm.h
78--- libdrm-2.4.0/libdrm/xf86drm.h.mknod 2007-07-19 00:27:52.000000000 -0400
79+++ libdrm-2.4.0/libdrm/xf86drm.h 2007-11-12 19:27:51.000000000 -0500
80@@ -39,14 +39,6 @@
81 #include <stdint.h>
82 #include <drm.h>
83
84- /* Defaults, if nothing set in xf86config */
85-#define DRM_DEV_UID 0
86-#define DRM_DEV_GID 0
87-/* Default /dev/dri directory permissions 0755 */
88-#define DRM_DEV_DIRMODE \
89- (S_IRUSR|S_IWUSR|S_IXUSR|S_IRGRP|S_IXGRP|S_IROTH|S_IXOTH)
90-#define DRM_DEV_MODE (S_IRUSR|S_IWUSR|S_IRGRP|S_IWGRP)
91-
92 #define DRM_DIR_NAME "/dev/dri"
93 #define DRM_DEV_NAME "%s/card%d"
94 #define DRM_PROC_NAME "/proc/dri/" /* For backward Linux compatibility */
This page took 0.056591 seconds and 4 git commands to generate.