Wayland: Clean up clipboard writing

(cherry picked from commit 34418951cc)
This commit is contained in:
Camilla Löwy 2022-03-24 20:34:04 +01:00
parent ea1b6b9638
commit 4d68daedc9

View File

@ -1725,10 +1725,6 @@ static void dataSourceHandleSend(void* userData,
const char* mimeType, const char* mimeType,
int fd) int fd)
{ {
char* string = _glfw.wl.clipboardString;
size_t len = strlen(string);
int ret;
if (_glfw.wl.selectionSource != source) if (_glfw.wl.selectionSource != source)
{ {
_glfwInputError(GLFW_PLATFORM_ERROR, _glfwInputError(GLFW_PLATFORM_ERROR,
@ -1737,6 +1733,7 @@ static void dataSourceHandleSend(void* userData,
return; return;
} }
char* string = _glfw.wl.clipboardString;
if (!string) if (!string)
{ {
_glfwInputError(GLFW_PLATFORM_ERROR, _glfwInputError(GLFW_PLATFORM_ERROR,
@ -1753,22 +1750,26 @@ static void dataSourceHandleSend(void* userData,
return; return;
} }
while (len > 0) size_t length = strlen(string);
while (length > 0)
{ {
ret = write(fd, string, len); const ssize_t result = write(fd, string, length);
if (ret == -1 && errno == EINTR) if (result == -1)
continue;
if (ret == -1)
{ {
if (errno == EINTR)
continue;
_glfwInputError(GLFW_PLATFORM_ERROR, _glfwInputError(GLFW_PLATFORM_ERROR,
"Wayland: Error while writing the clipboard: %s", "Wayland: Error while writing the clipboard: %s",
strerror(errno)); strerror(errno));
close(fd); break;
return;
} }
len -= ret;
string += ret; length -= result;
string += result;
} }
close(fd); close(fd);
} }