[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