fd_set rset, wset, xset;
int i, fdcount, fdsize, *fdlist;
int fd, fdstate, rwx, ret, maxfd;
- long now = GETTICKCOUNT();
+ unsigned long now = GETTICKCOUNT();
fdlist = NULL;
fdcount = fdsize = 0;
FD_SET_MAX(0, maxfd, rset);
do {
- long next, ticks;
+ unsigned long next, then;
+ long ticks;
struct timeval tv, *ptv;
if (run_timers(now, &next)) {
- ticks = next - GETTICKCOUNT();
- if (ticks <= 0)
- ticks = 1; /* just in case */
+ then = now;
+ now = GETTICKCOUNT();
+ if (now - then > next - then)
+ ticks = 0;
+ else
+ ticks = next - now;
tv.tv_sec = ticks / 1000;
tv.tv_usec = ticks % 1000 * 1000;
ptv = &tv;
ret = ssh_sftp_do_select(TRUE, no_fds_ok);
if (ret < 0) {
printf("connection died\n");
+ sfree(buf);
return NULL; /* woop woop */
}
if (ret > 0) {
ret = read(0, buf+buflen, 1);
if (ret < 0) {
perror("read");
+ sfree(buf);
return NULL;
}
if (ret == 0) {
/* eof on stdin; no error, but no answer either */
+ sfree(buf);
return NULL;
}