From da966a2ab1f5161cc0a21a4cd7e07edf732ebee9 Mon Sep 17 00:00:00 2001
From: Dmitry Rogozhkin <dmitry.v.rogozhkin@intel.com>
Date: Thu, 19 Mar 2020 20:59:12 -0700
Subject: [PATCH] build: fix Werror=format-overflow under gcc-10

Fixes: #870

With upcoming gcc-10 we start to see Werror=format-overflow reporting
that we attempt to printf %s null strings.

Change-Id: I7a62bc98bf7dd6bcd61d475d7650a06aa1a70932
Signed-off-by: Dmitry Rogozhkin <dmitry.v.rogozhkin@intel.com>
[Retrieved from:
https://github.com/intel/media-driver/commit/da966a2ab1f5161cc0a21a4cd7e07edf732ebee9]
Signed-off-by: Fabrice Fontaine <fontaine.fabrice@gmail.com>
---
 media_driver/linux/common/os/i915/xf86drm.c   | 57 ++++++++++---------
 .../linux/ult/libdrm_mock/xf86drm_mock.c      | 57 ++++++++++---------
 2 files changed, 58 insertions(+), 56 deletions(-)

diff --git a/media_driver/linux/common/os/i915/xf86drm.c b/media_driver/linux/common/os/i915/xf86drm.c
index 7594bde99..d0fc1b7ac 100644
--- a/media_driver/linux/common/os/i915/xf86drm.c
+++ b/media_driver/linux/common/os/i915/xf86drm.c
@@ -581,37 +581,38 @@ static int drmOpenByBusid(const char *busid, int type)
 
     drmMsg("drmOpenByBusid: Searching for BusID %s\n", busid);
     for (i = base; i < base + DRM_MAX_MINOR; i++) {
-    fd = drmOpenMinor(i, 1, type);
-    drmMsg("drmOpenByBusid: drmOpenMinor returns %d\n", fd);
-    if (fd >= 0) {
-        /* We need to try for 1.4 first for proper PCI domain support
-         * and if that fails, we know the kernel is busted
-         */
-        sv.drm_di_major = 1;
-        sv.drm_di_minor = 4;
-        sv.drm_dd_major = -1;    /* Don't care */
-        sv.drm_dd_minor = -1;    /* Don't care */
-        if (drmSetInterfaceVersion(fd, &sv)) {
+        fd = drmOpenMinor(i, 1, type);
+        drmMsg("drmOpenByBusid: drmOpenMinor returns %d\n", fd);
+        if (fd >= 0) {
+            /* We need to try for 1.4 first for proper PCI domain support
+             * and if that fails, we know the kernel is busted
+             */
+            sv.drm_di_major = 1;
+            sv.drm_di_minor = 4;
+            sv.drm_dd_major = -1;    /* Don't care */
+            sv.drm_dd_minor = -1;    /* Don't care */
+            if (drmSetInterfaceVersion(fd, &sv)) {
 #ifndef __alpha__
-        pci_domain_ok = 0;
+                pci_domain_ok = 0;
 #endif
-        sv.drm_di_major = 1;
-        sv.drm_di_minor = 1;
-        sv.drm_dd_major = -1;       /* Don't care */
-        sv.drm_dd_minor = -1;       /* Don't care */
-        drmMsg("drmOpenByBusid: Interface 1.4 failed, trying 1.1\n");
-        drmSetInterfaceVersion(fd, &sv);
-        }
-        buf = drmGetBusid(fd);
-        drmMsg("drmOpenByBusid: drmGetBusid reports %s\n", buf);
-        if (buf && drmMatchBusID(buf, busid, pci_domain_ok)) {
-        drmFreeBusid(buf);
-        return fd;
+                sv.drm_di_major = 1;
+                sv.drm_di_minor = 1;
+                sv.drm_dd_major = -1;       /* Don't care */
+                sv.drm_dd_minor = -1;       /* Don't care */
+                drmMsg("drmOpenByBusid: Interface 1.4 failed, trying 1.1\n");
+                drmSetInterfaceVersion(fd, &sv);
+            }
+            buf = drmGetBusid(fd);
+            if (buf) {
+                drmMsg("drmOpenByBusid: drmGetBusid reports %s\n", buf);
+                if (drmMatchBusID(buf, busid, pci_domain_ok)) {
+                    drmFreeBusid(buf);
+                    return fd;
+                }
+                drmFreeBusid(buf);
+            }
+            close(fd);
         }
-        if (buf)
-        drmFreeBusid(buf);
-        close(fd);
-    }
     }
     return -1;
 }
diff --git a/media_driver/linux/ult/libdrm_mock/xf86drm_mock.c b/media_driver/linux/ult/libdrm_mock/xf86drm_mock.c
index 7e5246295..2e5863798 100644
--- a/media_driver/linux/ult/libdrm_mock/xf86drm_mock.c
+++ b/media_driver/linux/ult/libdrm_mock/xf86drm_mock.c
@@ -790,37 +790,38 @@ static int drmOpenByBusid(const char *busid, int type)
 
     drmMsg("drmOpenByBusid: Searching for BusID %s\n", busid);
     for (i = base; i < base + DRM_MAX_MINOR; i++) {
-    fd = drmOpenMinor(i, 1, type);
-    drmMsg("drmOpenByBusid: drmOpenMinor returns %d\n", fd);
-    if (fd >= 0) {
-        /* We need to try for 1.4 first for proper PCI domain support
-         * and if that fails, we know the kernel is busted
-         */
-        sv.drm_di_major = 1;
-        sv.drm_di_minor = 4;
-        sv.drm_dd_major = -1;    /* Don't care */
-        sv.drm_dd_minor = -1;    /* Don't care */
-        if (drmSetInterfaceVersion(fd, &sv)) {
+        fd = drmOpenMinor(i, 1, type);
+        drmMsg("drmOpenByBusid: drmOpenMinor returns %d\n", fd);
+        if (fd >= 0) {
+            /* We need to try for 1.4 first for proper PCI domain support
+             * and if that fails, we know the kernel is busted
+             */
+            sv.drm_di_major = 1;
+            sv.drm_di_minor = 4;
+            sv.drm_dd_major = -1;    /* Don't care */
+            sv.drm_dd_minor = -1;    /* Don't care */
+            if (drmSetInterfaceVersion(fd, &sv)) {
 #ifndef __alpha__
-        pci_domain_ok = 0;
+                pci_domain_ok = 0;
 #endif
-        sv.drm_di_major = 1;
-        sv.drm_di_minor = 1;
-        sv.drm_dd_major = -1;       /* Don't care */
-        sv.drm_dd_minor = -1;       /* Don't care */
-        drmMsg("drmOpenByBusid: Interface 1.4 failed, trying 1.1\n");
-        drmSetInterfaceVersion(fd, &sv);
-        }
-        buf = drmGetBusid(fd);
-        drmMsg("drmOpenByBusid: drmGetBusid reports %s\n", buf);
-        if (buf && drmMatchBusID(buf, busid, pci_domain_ok)) {
-        drmFreeBusid(buf);
-        return fd;
+                sv.drm_di_major = 1;
+                sv.drm_di_minor = 1;
+                sv.drm_dd_major = -1;       /* Don't care */
+                sv.drm_dd_minor = -1;       /* Don't care */
+                drmMsg("drmOpenByBusid: Interface 1.4 failed, trying 1.1\n");
+                drmSetInterfaceVersion(fd, &sv);
+            }
+            buf = drmGetBusid(fd);
+            if (buf) {
+                drmMsg("drmOpenByBusid: drmGetBusid reports %s\n", buf);
+                if (drmMatchBusID(buf, busid, pci_domain_ok)) {
+                    drmFreeBusid(buf);
+                    return fd;
+                }
+                drmFreeBusid(buf);
+            }
+            close(fd);
         }
-        if (buf)
-        drmFreeBusid(buf);
-        close(fd);
-    }
     }
     return -1;
 }
