diff options
-rw-r--r-- | src/GsWidget.cxx | 15 |
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() { |