Package: lrzsz
Version: 0.11

If the connection closes while lrz is downloading a file, lrz will hang.
This happens because the maintainer of the package commented out all of the
calls to signal().  I fixed the declarations of the signal handlers instead.

I'll append my patches.  Thanks in advance for integrating them.  I would
offer to take over the package, but I don't really use it and don't have
time to read the source code of dpkg/dselect.  (Is there any documentation
yet?)

Matt Birkholz <[EMAIL PROTECTED]>
Finger [EMAIL PROTECTED] for PGP 2.6.2 Public Key ID = 74305425
Key Fingerprint = B3 34 FB 3E 3C FE E8 57  AA B4 B2 95 A7 C0 1E AF
*** lrz.c.~1~   Sun Jul 17 08:29:48 1994
--- lrz.c       Sat Dec  9 00:36:51 1995
***************
*** 131,143 ****
  #include "zm.c"

  int tryzhdrtype=ZRINIT;       /* Header type to send corresponding to Last rx 
close */
!
! alrm()
  {
!       longjmp(tohere, -1);
  }

  /* called by signal interrupt or terminate to clean things up */
  bibi(n)
  {
        if (Zmodem)
--- 131,148 ----
  #include "zm.c"

  int tryzhdrtype=ZRINIT;       /* Header type to send corresponding to Last rx 
close */
! #ifdef LINUX
! void
! #endif
! alrm(int signum)
  {
!       longjmp(tohere, signum);
  }

  /* called by signal interrupt or terminate to clean things up */
+ #ifdef LINUX
+ void
+ #endif
  bibi(n)
  {
        if (Zmodem)
***************
*** 240,246 ****
        }
        vfile("%s %s for %s\n", Progname, VERSION, OS);
        mode(1);
! #ifndef LINUX
        if (signal(SIGINT, bibi) == SIG_IGN) {
                signal(SIGINT, SIG_IGN); signal(SIGKILL, SIG_IGN);
        }
--- 245,251 ----
        }
        vfile("%s %s for %s\n", Progname, VERSION, OS);
        mode(1);
!
        if (signal(SIGINT, bibi) == SIG_IGN) {
                signal(SIGINT, SIG_IGN); signal(SIGKILL, SIG_IGN);
        }
***************
*** 248,254 ****
                signal(SIGINT, bibi); signal(SIGKILL, bibi);
        }
        signal(SIGTERM, bibi);
! #endif
        if (wcreceive(npats, patts)==ERROR) {
                exitcode=0200;
                canit();
--- 253,259 ----
                signal(SIGINT, bibi); signal(SIGKILL, bibi);
        }
        signal(SIGTERM, bibi);
!
        if (wcreceive(npats, patts)==ERROR) {
                exitcode=0200;
                canit();
***************
*** 574,582 ****
                        fprintf(stderr, "Readline:TIMEOUT\n");
                return TIMEOUT;
        }
! #ifndef LINUX
        signal(SIGALRM, alrm); alarm(n);
! #endif
        Lleft=read(iofd, cdq=linbuf, Readnum);
        alarm(0);
        if (Verbose > 5) {
--- 579,587 ----
                        fprintf(stderr, "Readline:TIMEOUT\n");
                return TIMEOUT;
        }
!
        signal(SIGALRM, alrm); alarm(n);
!
        Lleft=read(iofd, cdq=linbuf, Readnum);
        alarm(0);
        if (Verbose > 5) {
*** lsz.c.~1~   Sun Jul 17 08:29:57 1994
--- lsz.c       Sat Dec  9 00:46:35 1995
***************
*** 145,150 ****
--- 145,153 ----
  jmp_buf intrjmp;      /* For the interrupt on RX CAN */

  /* called by signal interrupt or terminate to clean things up */
+ #ifdef LINUX
+ void
+ #endif
  bibi(n)
  {
        canit(); fflush(stdout); mode(0);
***************
*** 157,165 ****
        exit(128+n);
  }
  /* Called when ZMODEM gets an interrupt (^X) */
! onintr()
  {
!       signal(SIGINT, SIG_IGN);
        longjmp(intrjmp, -1);
  }

--- 160,171 ----
        exit(128+n);
  }
  /* Called when ZMODEM gets an interrupt (^X) */
! #ifdef LINUX
! void
! #endif
! onintr(int signum)
  {
!       signal(signum, SIG_IGN);
        longjmp(intrjmp, -1);
  }

***************
*** 333,339 ****

        mode(1);

- #ifndef LINUX
        if (signal(SIGINT, bibi) == SIG_IGN) {
                signal(SIGINT, SIG_IGN); signal(SIGKILL, SIG_IGN);
        } else {
--- 339,344 ----
***************
*** 342,348 ****
        if ( !Fromcu)
                signal(SIGQUIT, SIG_IGN);
        signal(SIGTERM, bibi);
- #endif

        if ( !Modem2) {
                if (!Nozmodem) {
--- 347,352 ----
***************
*** 840,849 ****
        }
  }

!
! alrm()
  {
!       longjmp(tohere, -1);
  }


--- 844,855 ----
        }
  }

! #ifdef LINUX
! void
! #endif
! alrm(int signum)
  {
!       longjmp(tohere, signum);
  }


***************
*** 867,875 ****
        if (Verbose>5) {
                fprintf(stderr, "Timeout=%d Calling alarm(%d) ", timeout, c);
        }
! #ifndef LINUX
        signal(SIGALRM, alrm); alarm(c);
! #endif
        c=read(iofd, byt, 1);
        alarm(0);
        if (Verbose>5)
--- 873,881 ----
        if (Verbose>5) {
                fprintf(stderr, "Timeout=%d Calling alarm(%d) ", timeout, c);
        }
!
        signal(SIGALRM, alrm); alarm(c);
!
        c=read(iofd, byt, 1);
        alarm(0);
        if (Verbose>5)
***************
*** 1236,1254 ****
                                c = getinsync(1);
                                goto gotack;
                        case XOFF:              /* Wait a while for an XON */
- #ifndef LINUX
                        case XOFF|0200:
- #endif
                                readline(100);
                        }
                }
  #endif
        }

- #ifndef LINUX
        if ( !Fromcu)
                signal(SIGINT, onintr);
- #endif

        newcnt = Rxbuflen;
        Txwcnt = 0;
--- 1242,1256 ----
***************
*** 1280,1288 ****
  #endif
                                                goto waitack;
                                        case XOFF:      /* Wait for XON */
- #ifndef LINUX
                                        case XOFF|0200:
- #endif
                                                readline(100);
                                        }
                                }
--- 1282,1288 ----
***************
*** 1346,1354 ****
                                zsdata(txbuf, 0, ZCRCE);
                                goto gotack;
                        case XOFF:              /* Wait a while for an XON */
- #ifndef LINUX
                        case XOFF|0200:
- #endif
                                readline(100);
                        default:
                                ++junkcount;
--- 1346,1352 ----

Reply via email to