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