summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/GsWidget.cxx15
1 files changed, 11 insertions, 4 deletions
diff --git a/src/GsWidget.cxx b/src/GsWidget.cxx
index 5741be6..eeefd90 100644
--- a/src/GsWidget.cxx
+++ b/src/GsWidget.cxx
@@ -272,23 +272,30 @@ GsWidget::load_page(int p) {
int GsWidget::fd_copy(int to, int from, size_t len) {
size_t n, r;
char buf[1024];
+ int ret = 0;
+
+ signal(SIGPIPE, SIG_IGN); // don't die if gs has a problem
n = 0;
while(len > 0) {
- Fl::check(); // let fltk do its stuff - otherwise
- // gs can't get the GHOSTVIEW property
+
+ Fl::check(); // let fltk do its stuff
+
r = read(from, buf, MIN(sizeof(buf), len));
if (r < 0) {
perror("read");
- return 1;
+ ret = 1;
+ break;
}
write(to, buf, r);
len -= r;
}
- return 0;
+ signal(SIGPIPE, SIG_DFL);
+
+ return ret;
}
void GsWidget::exec_gs() {