Bläddra i källkod

Wayland: Clean up clipboard reading

Camilla Löwy 3 år sedan
förälder
incheckning
c132135332
1 ändrade filer med 18 tillägg och 14 borttagningar
  1. 18 14
      src/wl_window.c

+ 18 - 14
src/wl_window.c

@@ -1704,10 +1704,6 @@ void _glfwSetClipboardStringWayland(const char* string)
 
 const char* _glfwGetClipboardStringWayland(void)
 {
-    int fds[2];
-    int ret;
-    size_t len = 0;
-
     if (!_glfw.wl.selectionOffer)
     {
         _glfwInputError(GLFW_FORMAT_UNAVAILABLE,
@@ -1718,8 +1714,9 @@ const char* _glfwGetClipboardStringWayland(void)
     if (_glfw.wl.selectionSource)
         return _glfw.wl.clipboardString;
 
-    ret = pipe2(fds, O_CLOEXEC);
-    if (ret < 0)
+    int fds[2];
+
+    if (pipe2(fds, O_CLOEXEC) == -1)
     {
         // TODO: also report errno maybe?
         _glfwInputError(GLFW_PLATFORM_ERROR,
@@ -1732,11 +1729,14 @@ const char* _glfwGetClipboardStringWayland(void)
     flushDisplay();
     close(fds[1]);
 
+    size_t length = 0;
+
     for (;;)
     {
         // Grow the clipboard if we need to paste something bigger, there is no
         // shrink operation yet.
-        const size_t requiredSize = len + 4096 + 1;
+        const size_t readSize = 4096;
+        const size_t requiredSize = length + readSize + 1;
         if (requiredSize > _glfw.wl.clipboardSize)
         {
             char* string = _glfw_realloc(_glfw.wl.clipboardString, requiredSize);
@@ -1753,23 +1753,27 @@ const char* _glfwGetClipboardStringWayland(void)
         }
 
         // Then read from the fd to the clipboard, handling all known errors.
-        ret = read(fds[0], _glfw.wl.clipboardString + len, 4096);
-        if (ret == 0)
+        const ssize_t result = read(fds[0], _glfw.wl.clipboardString + length, readSize);
+        if (result == 0)
             break;
-        if (ret == -1 && errno == EINTR)
-            continue;
-        if (ret == -1)
+        else if (result == -1)
         {
+            if (errno == EINTR)
+                continue;
+
             // TODO: also report errno maybe.
             _glfwInputError(GLFW_PLATFORM_ERROR,
                             "Wayland: Failed to read from clipboard fd");
             close(fds[0]);
             return NULL;
         }
-        len += ret;
+
+        length += result;
     }
+
     close(fds[0]);
-    _glfw.wl.clipboardString[len] = '\0';
+
+    _glfw.wl.clipboardString[length] = '\0';
     return _glfw.wl.clipboardString;
 }