[rancid] expect-hack1 not applied to patched version of expect-5.4.3 on the FTP site?

heasley heas at shrubbery.net
Tue Aug 28 19:36:48 UTC 2012


Tue, Aug 28, 2012 at 07:17:53PM +0000, Matthew J Wilson:
> On 8/28/12 1:21 PM, "heasley" <heas at shrubbery.net> wrote:
> >thats the virgin, iirc,
> >
> >ftp://ftp.shrubbery.net/pub/rancid/expect-5.43.0_hack.tar.bz2
> 
> 
> That tarball (when I download it anyway) has expect-hack2 applied to it
> for solaris, not expect-hack1 for linux (diff -u output appended at the
> bottom of this email).

it should work just fine; the one for solaris is just more "complete" and
avoids a problem that affect bash if an expect timeout followed.  it should
compile on linux.

> When I look at the tarballs from the FTP site:
> expect-5.40.1.tar.gz       - has linux expect-hack1 applied
> expect-5.40.1_hack2.tar.gz - has solaris expect-hack2 applied
> expect-5.43.0.tar.bz2      - vanilla: no hack patch applied
> expect-5.43.0_hack.tar.bz2 - has solaris expect-hack2 applied
> 
> I don't see an expect-5.43 tarball on the FTP site that has the linux
> expect-hack1 applied to it.
> 
> Thanks for taking a look at this.
> Matt
> 
> 
> 
> $ diff -u expect-5.43/exp_chan.c.orig expect-5.43/exp_chan.c
> --- expect-5.43/exp_chan.c.orig	2005-02-07 20:01:20.000000000 -0600
> +++ expect-5.43/exp_chan.c	2010-11-12 15:10:44.000000000 -0600
> @@ -12,6 +12,7 @@
>  #include <errno.h>
>  #include <ctype.h>	/* for isspace */
>  #include <time.h>	/* for time(3) */
> +#include <poll.h>
>  
>  #include "expect_cf.h"
>  
> @@ -190,6 +191,7 @@
>      ExpState *esPtr = (ExpState *) instanceData;
>      int bytesRead;			/* How many bytes were actually
>                                           * read from the input device? */
> +struct pollfd fds[1];
>  
>      *errorCodePtr = 0;
>      
> @@ -199,6 +201,16 @@
>       * possible, if the channel is in blocking mode. If the channel is
>       * nonblocking, the read will never block.
>       */
> +fds[0].fd = esPtr->fdin;
> +fds[0].events = POLLIN | POLLERR | POLLHUP | POLLNVAL;
> +bytesRead = poll(fds, 1, 0);
> +if (bytesRead <= 0) {
> +       *errorCodePtr = EWOULDBLOCK;
> +       return(-1);
> +} else if (fds[0].revents & (POLLERR | POLLHUP | POLLNVAL)) {
> +       *errorCodePtr = EBADF;
> +       return(-1);
> +}
>  
>      bytesRead = read(esPtr->fdin, buf, (size_t) toRead);
>      /*printf("ExpInputProc: read(%d,,) = %d\r\n",esPtr->fdin,bytesRead);*/
> 


More information about the Rancid-discuss mailing list