hurd-port
authorDebian X Strike Force <debian-x@lists.debian.org>
Tue, 10 Nov 2020 17:51:20 +0000 (17:51 +0000)
committerTimo Aaltonen <tjaalton@debian.org>
Tue, 10 Nov 2020 17:51:20 +0000 (17:51 +0000)
Gbp-Pq: Name hurd-port.diff

include/drm/drm.h
xf86drm.c
xf86drm.h

index c7fd2a35fd7b63efa6510feedb5e470b6644b3bc..4c54463bae004af722ef93d6f766d9789d98b050 100644 (file)
 #include <asm/ioctl.h>
 typedef unsigned int drm_handle_t;
 
+#elif defined(__GNU__)
+
+#include <sys/types.h>
+#include <sys/ioctl.h>
+#include <mach/i386/ioccom.h>
+typedef __int8_t   __s8;
+typedef __uint8_t  __u8;
+typedef __int16_t  __s16;
+typedef __uint16_t __u16;
+typedef __int32_t  __s32;
+typedef __uint32_t __u32;
+typedef __int64_t  __s64;
+typedef __uint64_t __u64;
+typedef size_t   __kernel_size_t;
+typedef unsigned int drm_handle_t;
+
 #else /* One of the BSDs */
 
 #include <stdint.h>
index dbb7c14bf6af5c547631cdf0aa8db10ae58db2ae..8763975b96c41b50cdcc14dd9d87f0401f183177 100644 (file)
--- a/xf86drm.c
+++ b/xf86drm.c
@@ -2996,7 +2996,8 @@ static char *drmGetMinorNameForFD(int fd, int type)
     return strdup(name);
 #else
     struct stat sbuf;
-    char buf[PATH_MAX + 1];
+    char *buf = NULL;
+    int len = 0;
     const char *dev_name = drmGetDeviceName(type);
     unsigned int maj, min;
     int n;
@@ -3013,11 +3014,18 @@ static char *drmGetMinorNameForFD(int fd, int type)
     if (!dev_name)
         return NULL;
 
-    n = snprintf(buf, sizeof(buf), dev_name, DRM_DIR_NAME, min);
-    if (n == -1 || n >= sizeof(buf))
+    len = snprintf(NULL, 0, dev_name, DRM_DIR_NAME, min);
+    if (len < 0)
         return NULL;
+    len++;
+    buf = malloc(len);
+    n = snprintf(buf, len, dev_name, DRM_DIR_NAME, min);
+    if (n == -1 || n >= len) {
+        free(buf);
+        return NULL;
+    }
 
-    return strdup(buf);
+    return buf;
 #endif
 }
 
@@ -3963,17 +3971,30 @@ process_device(drmDevicePtr *device, const char *d_name,
                bool fetch_deviceinfo, uint32_t flags)
 {
     struct stat sbuf;
-    char node[PATH_MAX + 1];
+    char *node = NULL;
     int node_type, subsystem_type;
+    int len = 0, n, ret = 0;
     unsigned int maj, min;
 
     node_type = drmGetNodeType(d_name);
     if (node_type < 0)
         return -1;
 
-    snprintf(node, PATH_MAX, "%s/%s", DRM_DIR_NAME, d_name);
-    if (stat(node, &sbuf))
+    len = snprintf(NULL, 0, "%s/%s", DRM_DIR_NAME, d_name);
+    if (len < 0)
+      return -1;
+    len++;
+    node = malloc(len);
+    n = snprintf(node, len, "%s/%s", DRM_DIR_NAME, d_name);
+    if (n == -1 || n >= len) {
+        free(node);
         return -1;
+    }
+
+    if (stat(node, &sbuf)) {
+        free(node);
+        return -1;
+    }
 
     maj = major(sbuf.st_rdev);
     min = minor(sbuf.st_rdev);
@@ -3988,18 +4009,27 @@ process_device(drmDevicePtr *device, const char *d_name,
     switch (subsystem_type) {
     case DRM_BUS_PCI:
     case DRM_BUS_VIRTIO:
-        return drmProcessPciDevice(device, node, node_type, maj, min,
+        ret = drmProcessPciDevice(device, node, node_type, maj, min,
                                    fetch_deviceinfo, flags);
+       free(node);
+       return ret;
     case DRM_BUS_USB:
-        return drmProcessUsbDevice(device, node, node_type, maj, min,
+        ret = drmProcessUsbDevice(device, node, node_type, maj, min,
                                    fetch_deviceinfo, flags);
+       free(node);
+       return ret;
     case DRM_BUS_PLATFORM:
-        return drmProcessPlatformDevice(device, node, node_type, maj, min,
+        ret = drmProcessPlatformDevice(device, node, node_type, maj, min,
                                         fetch_deviceinfo, flags);
+       free(node);
+       return ret;
     case DRM_BUS_HOST1X:
-        return drmProcessHost1xDevice(device, node, node_type, maj, min,
+        ret = drmProcessHost1xDevice(device, node, node_type, maj, min,
                                       fetch_deviceinfo, flags);
+       free(node);
+       return ret;
     default:
+        free(node);
         return -1;
    }
 }
@@ -4322,10 +4352,10 @@ drm_public char *drmGetDeviceNameFromFd2(int fd)
     return drmGetDeviceNameFromFd(fd);
 #else
     struct stat      sbuf;
-    char             node[PATH_MAX + 1];
+    char            *node = NULL;
     const char      *dev_name;
     int              node_type;
-    int              maj, min, n;
+    int              maj, min, n, len = 0;
 
     if (fstat(fd, &sbuf))
         return NULL;
@@ -4344,11 +4374,16 @@ drm_public char *drmGetDeviceNameFromFd2(int fd)
     if (!dev_name)
         return NULL;
 
-    n = snprintf(node, PATH_MAX, dev_name, DRM_DIR_NAME, min);
-    if (n == -1 || n >= PATH_MAX)
+    len = snprintf(NULL, 0, dev_name, DRM_DIR_NAME, min);
+    if (len < 0)
+      return NULL;
+    len++;
+    node = malloc(len);
+    n = snprintf(node, len, dev_name, DRM_DIR_NAME, min);
+    if (n == -1 || n >= len)
       return NULL;
 
-    return strdup(node);
+    return node;
 #endif
 }
 
index dcac4804bd1a595f05874e20bb1789cbef2d906e..ba2f6f4828f326bc08eb87138df1cede60b9ebbd 100644 (file)
--- a/xf86drm.h
+++ b/xf86drm.h
@@ -56,6 +56,16 @@ extern "C" {
 #define DRM_IOC_READWRITE      _IOC_READ|_IOC_WRITE
 #define DRM_IOC(dir, group, nr, size) _IOC(dir, group, nr, size)
 
+#elif defined(__GNU__)
+#include <mach/port.h>
+#include <hurd/ioctl.h>
+#define DRM_IOCTL_NR(n)         ((n) & 0xff)
+#define DRM_IOC_VOID            IOC_VOID
+#define DRM_IOC_READ            IOC_OUT
+#define DRM_IOC_WRITE           IOC_IN
+#define DRM_IOC_READWRITE       IOC_INOUT
+#define DRM_IOC(dir, group, nr, size) _IOC(dir, group, nr, size)
+
 #else /* One of the *BSDs */
 
 #include <sys/ioccom.h>