From 8b7429b9c0d4c55bd12566287845d3255c539f50 Mon Sep 17 00:00:00 2001
From: Chris Thrasher <chrisjthrasher@gmail.com>
Date: Thu, 12 Jan 2023 21:49:10 -0700
Subject: [PATCH] Analyze DRM backend

---
 .github/workflows/ci.yml              |  9 ++++---
 src/SFML/Window/DRM/DRMContext.cpp    |  6 ++---
 src/SFML/Window/DRM/InputImplUDev.cpp | 36 ++++++++++++++-------------
 3 files changed, 27 insertions(+), 24 deletions(-)

diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml
index 613fb053..2480abf9 100644
--- a/.github/workflows/ci.yml
+++ b/.github/workflows/ci.yml
@@ -145,8 +145,9 @@ jobs:
       fail-fast: false
       matrix:
         platform:
-        - { name: Linux, os: ubuntu-22.04 }
-        - { name: macOS, os: macos-12 }
+        - { name: Linux,     os: ubuntu-22.04 }
+        - { name: Linux DRM, os: ubuntu-22.04, flags: -DSFML_USE_DRM=TRUE }
+        - { name: macOS,     os: macos-12 }
 
     steps:
     - name: Checkout Code
@@ -154,7 +155,7 @@ jobs:
 
     - name: Install Linux Dependencies
       if: runner.os == 'Linux'
-      run: sudo apt-get update && sudo apt-get install libxrandr-dev libxcursor-dev libudev-dev libopenal-dev libflac-dev libvorbis-dev libgl1-mesa-dev libegl1-mesa-dev
+      run: sudo apt-get update && sudo apt-get install libxrandr-dev libxcursor-dev libudev-dev libopenal-dev libflac-dev libvorbis-dev libgl1-mesa-dev libegl1-mesa-dev libdrm-dev libgbm-dev
 
     - name: Install macOS Dependencies
       if: runner.os == 'macOS'
@@ -163,7 +164,7 @@ jobs:
         echo /usr/local/opt/llvm/bin >> $GITHUB_PATH
 
     - name: Configure
-      run: cmake -S $GITHUB_WORKSPACE -B $GITHUB_WORKSPACE/build -DCMAKE_C_COMPILER=clang -DCMAKE_CXX_COMPILER=clang++ -DCMAKE_EXPORT_COMPILE_COMMANDS=ON -DSFML_BUILD_EXAMPLES=TRUE -DSFML_BUILD_TEST_SUITE=TRUE
+      run: cmake -S $GITHUB_WORKSPACE -B $GITHUB_WORKSPACE/build -DCMAKE_C_COMPILER=clang -DCMAKE_CXX_COMPILER=clang++ -DCMAKE_EXPORT_COMPILE_COMMANDS=ON -DSFML_BUILD_EXAMPLES=TRUE -DSFML_BUILD_TEST_SUITE=TRUE ${{matrix.platform.flags}}
 
     - name: Analyze Code
       run: cmake --build $GITHUB_WORKSPACE/build --target tidy
diff --git a/src/SFML/Window/DRM/DRMContext.cpp b/src/SFML/Window/DRM/DRMContext.cpp
index c3200624..16fbf105 100644
--- a/src/SFML/Window/DRM/DRMContext.cpp
+++ b/src/SFML/Window/DRM/DRMContext.cpp
@@ -121,7 +121,7 @@ void cleanup()
     close(drmNode.fileDescriptor);
 
     drmNode.fileDescriptor = -1;
-    drmNode.mode           = 0;
+    drmNode.mode           = nullptr;
 
     pollFD      = {};
     drmEventCtx = {};
@@ -161,8 +161,8 @@ DrmFb* drmFbGetFromBo(gbm_bo& bo)
     std::uint32_t offsets[4]   = {0};
     std::uint64_t modifiers[4] = {0};
     modifiers[0]               = gbm_bo_get_modifier(&bo);
-    const int num_planes       = gbm_bo_get_plane_count(&bo);
-    for (int i = 0; i < num_planes; ++i)
+    const int numPlanes        = gbm_bo_get_plane_count(&bo);
+    for (int i = 0; i < numPlanes; ++i)
     {
         strides[i]   = gbm_bo_get_stride_for_plane(&bo, i);
         handles[i]   = gbm_bo_get_handle(&bo).u32;
diff --git a/src/SFML/Window/DRM/InputImplUDev.cpp b/src/SFML/Window/DRM/InputImplUDev.cpp
index 6c4c4e81..1bd415b0 100644
--- a/src/SFML/Window/DRM/InputImplUDev.cpp
+++ b/src/SFML/Window/DRM/InputImplUDev.cpp
@@ -63,8 +63,8 @@ int                    touchFd = -1;    // file descriptor we have seen MT event
 std::vector<TouchSlot> touchSlots;      // track the state of each touch "slot"
 int                    currentSlot = 0; // which slot are we currently updating?
 
-std::queue<sf::Event> eventQueue;     // events received and waiting to be consumed
-const int             MAX_QUEUE = 64; // The maximum size we let eventQueue grow to
+std::queue<sf::Event> eventQueue;    // events received and waiting to be consumed
+const int             maxQueue = 64; // The maximum size we let eventQueue grow to
 
 termios newTerminalConfig, oldTerminalConfig; // Terminal configurations
 
@@ -101,30 +101,30 @@ void uninitFileDescriptors()
 // Joysticks are handled in /src/SFML/Window/Unix/JoystickImpl.cpp
 bool keepFileDescriptor(int fileDesc)
 {
-    unsigned long bitmask_ev[NBITS(EV_MAX)];
-    unsigned long bitmask_key[NBITS(KEY_MAX)];
-    unsigned long bitmask_abs[NBITS(ABS_MAX)];
-    unsigned long bitmask_rel[NBITS(REL_MAX)];
+    unsigned long bitmaskEv[NBITS(EV_MAX)];
+    unsigned long bitmaskKey[NBITS(KEY_MAX)];
+    unsigned long bitmaskAbs[NBITS(ABS_MAX)];
+    unsigned long bitmaskRel[NBITS(REL_MAX)];
 
-    ioctl(fileDesc, EVIOCGBIT(0, sizeof(bitmask_ev)), &bitmask_ev);
-    ioctl(fileDesc, EVIOCGBIT(EV_KEY, sizeof(bitmask_key)), &bitmask_key);
-    ioctl(fileDesc, EVIOCGBIT(EV_ABS, sizeof(bitmask_abs)), &bitmask_abs);
-    ioctl(fileDesc, EVIOCGBIT(EV_REL, sizeof(bitmask_rel)), &bitmask_rel);
+    ioctl(fileDesc, EVIOCGBIT(0, sizeof(bitmaskEv)), &bitmaskEv);
+    ioctl(fileDesc, EVIOCGBIT(EV_KEY, sizeof(bitmaskKey)), &bitmaskKey);
+    ioctl(fileDesc, EVIOCGBIT(EV_ABS, sizeof(bitmaskAbs)), &bitmaskAbs);
+    ioctl(fileDesc, EVIOCGBIT(EV_REL, sizeof(bitmaskRel)), &bitmaskRel);
 
     // This is the keyboard test used by SDL.
     // The first 32 bits are ESC, numbers and Q to D;  If we have any of those,
     // consider it a keyboard device; do not test for KEY_RESERVED, though
-    bool is_keyboard = (bitmask_key[0] & 0xFFFFFFFE);
+    bool isKeyboard = (bitmaskKey[0] & 0xFFFFFFFE);
 
-    bool is_abs = TEST_BIT(EV_ABS, bitmask_ev) && TEST_BIT(ABS_X, bitmask_abs) && TEST_BIT(ABS_Y, bitmask_abs);
+    bool isAbs = TEST_BIT(EV_ABS, bitmaskEv) && TEST_BIT(ABS_X, bitmaskAbs) && TEST_BIT(ABS_Y, bitmaskAbs);
 
-    bool is_rel = TEST_BIT(EV_REL, bitmask_ev) && TEST_BIT(REL_X, bitmask_rel) && TEST_BIT(REL_Y, bitmask_rel);
+    bool isRel = TEST_BIT(EV_REL, bitmaskEv) && TEST_BIT(REL_X, bitmaskRel) && TEST_BIT(REL_Y, bitmaskRel);
 
-    bool is_mouse = (is_abs || is_rel) && TEST_BIT(BTN_MOUSE, bitmask_key);
+    bool isMouse = (isAbs || isRel) && TEST_BIT(BTN_MOUSE, bitmaskKey);
 
-    bool is_touch = is_abs && (TEST_BIT(BTN_TOOL_FINGER, bitmask_key) || TEST_BIT(BTN_TOUCH, bitmask_key));
+    bool isTouch = isAbs && (TEST_BIT(BTN_TOOL_FINGER, bitmaskKey) || TEST_BIT(BTN_TOUCH, bitmaskKey));
 
-    return is_keyboard || is_mouse || is_touch;
+    return isKeyboard || isMouse || isTouch;
 }
 
 void initFileDescriptors()
@@ -302,7 +302,7 @@ sf::Keyboard::Key toKey(int code)
 
 void pushEvent(sf::Event& event)
 {
-    if (eventQueue.size() >= MAX_QUEUE)
+    if (eventQueue.size() >= maxQueue)
         eventQueue.pop();
 
     eventQueue.push(event);
@@ -534,6 +534,8 @@ bool eventProcess(sf::Event& event)
         }
     }
 
+    (void)bytesRead; // Ignore clang-tidy dead store warning
+
     newTerminalConfig.c_lflag |= ICANON;
     tcsetattr(STDIN_FILENO, TCSANOW, &newTerminalConfig);