diff --git a/sway/ipc-server.c b/sway/ipc-server.c index 5bc64b1f..b6268404 100644 --- a/sway/ipc-server.c +++ b/sway/ipc-server.c @@ -617,8 +617,8 @@ void ipc_client_handle_command(struct ipc_client *client) { } size_t size; - bool found = false; const char **types = wlc_get_selection_types(&size); + const char *type = NULL; if (types == NULL || size == 0) { const char *error = "{ \"success\": false, \"error\": " "\"Empty clipboard\" }"; @@ -627,48 +627,50 @@ void ipc_client_handle_command(struct ipc_client *client) { } for (size_t i = 0; i < size; ++i) { - if (strcmp(types[i], "text/plain;charset=utf-8") != 0 - && strcmp(types[i], "text/plain") != 0) { - continue; + if (strcmp(types[i], "text/plain;charset=utf-8") == 0 + || strcmp(types[i], "text/plain") == 0) { + type = types[i]; + break; } + } + if (type) { struct get_clipboard_request *req = malloc(sizeof(*req)); if (!req) { sway_log(L_ERROR, "Unable to allocate get_clipboard_request"); - goto exit_cleanup; + goto clipboard_error; } int pipes[2]; if (pipe(pipes) == -1) { sway_log_errno(L_ERROR, "pipe call failed"); free(req); - break; + goto clipboard_error; } fcntl(pipes[0], F_SETFD, FD_CLOEXEC | O_NONBLOCK); fcntl(pipes[1], F_SETFD, FD_CLOEXEC | O_NONBLOCK); - if (!wlc_get_selection_data(types[i], pipes[1])) { + if (!wlc_get_selection_data(type, pipes[1])) { close(pipes[0]); close(pipes[1]); free(req); sway_log(L_ERROR, "wlc_get_selection_data failed"); - break; + goto clipboard_error; } req->client = client; req->event_source = wlc_event_loop_add_fd(pipes[0], WLC_EVENT_READABLE | WLC_EVENT_ERROR | WLC_EVENT_HANGUP, &ipc_selection_data_cb, req); - found = true; - break; + free(types); + goto exit_cleanup; } - if (!found) { - sway_log(L_INFO, "Clipboard has to text data"); - const char *error = "{ \"success\": false, \"error\": " - "\"Could not receive text data from clipboard\" }"; - ipc_send_reply(client, error, (uint32_t)strlen(error)); - } +clipboard_error: + sway_log(L_INFO, "Clipboard has to text data"); + const char *error = "{ \"success\": false, \"error\": " + "\"Could not receive text data from clipboard\" }"; + ipc_send_reply(client, error, (uint32_t)strlen(error)); free(types); goto exit_cleanup;