summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/drivers/Wayland/fl_wayland_clipboard_dnd.cxx21
1 files changed, 10 insertions, 11 deletions
diff --git a/src/drivers/Wayland/fl_wayland_clipboard_dnd.cxx b/src/drivers/Wayland/fl_wayland_clipboard_dnd.cxx
index 3e45126b6..12c525c46 100644
--- a/src/drivers/Wayland/fl_wayland_clipboard_dnd.cxx
+++ b/src/drivers/Wayland/fl_wayland_clipboard_dnd.cxx
@@ -585,19 +585,18 @@ static int get_clipboard_image(struct wl_data_offer *offer) {
Fl_Shared_Image *shared = 0;
strcpy(tmp_fname, "/tmp/clipboardXXXXXX");
int fd = mkstemp(tmp_fname);
- if (fd == -1) return 1;
- while (true) {
- char buf[10000];
- ssize_t n = read(fds[0], buf, sizeof(buf));
- if (n <= 0) {
- close(fds[0]);
- close(fd);
- break;
+ if (fd >= 0) {
+ while (true) {
+ char buf[10000];
+ ssize_t n = read(fds[0], buf, sizeof(buf));
+ if (n <= 0) break;
+ n = write(fd, buf, n);
}
- n = write(fd, buf, n);
+ close(fd);
+ shared = Fl_Shared_Image::get(tmp_fname);
+ fl_unlink(tmp_fname);
}
- shared = Fl_Shared_Image::get(tmp_fname);
- fl_unlink(tmp_fname);
+ close(fds[0]);
if (!shared) return 1;
int ld = shared->ld() ? shared->ld() : shared->w() * shared->d();
uchar *rgb = new uchar[shared->w() * shared->h() * shared->d()];