X-Git-Url: https://asedeno.scripts.mit.edu/gitweb/?a=blobdiff_plain;f=windows%2Fwinsftp.c;h=25ac6c9482079b14e0b1218614f02aa77db2430b;hb=cc66c86e7311c97db09da989c340ba3108c9e14f;hp=c5555d53f9aa159dcbdb2185c9aadfdd9edb5a16;hpb=a83a9cc2a367df90ff769c58d26a782ba646fc5e;p=PuTTY.git diff --git a/windows/winsftp.c b/windows/winsftp.c index c5555d53..25ac6c94 100644 --- a/windows/winsftp.c +++ b/windows/winsftp.c @@ -20,7 +20,7 @@ int get_userpass_input(prompts_t *p, unsigned char *in, int inlen) return ret; } -void platform_get_x11_auth(struct X11Display *display, const Config *cfg) +void platform_get_x11_auth(struct X11Display *display, Conf *conf) { /* Do nothing, therefore no auth. */ } @@ -88,7 +88,8 @@ struct RFile { }; RFile *open_existing_file(char *name, uint64 *size, - unsigned long *mtime, unsigned long *atime) + unsigned long *mtime, unsigned long *atime, + long *perms) { HANDLE h; RFile *ret; @@ -113,6 +114,9 @@ RFile *open_existing_file(char *name, uint64 *size, TIME_WIN_TO_POSIX(wrtime, *mtime); } + if (perms) + *perms = -1; + return ret; } @@ -137,7 +141,7 @@ struct WFile { HANDLE h; }; -WFile *open_new_file(char *name) +WFile *open_new_file(char *name, long perms) { HANDLE h; WFile *ret; @@ -482,15 +486,22 @@ extern int select_result(WPARAM, LPARAM); int do_eventsel_loop(HANDLE other_event) { int n, nhandles, nallhandles, netindex, otherindex; - long next, ticks; + unsigned long next, then; + long ticks; HANDLE *handles; SOCKET *sklist; int skcount; - long now = GETTICKCOUNT(); + unsigned long now = GETTICKCOUNT(); - if (run_timers(now, &next)) { - ticks = next - GETTICKCOUNT(); - if (ticks < 0) ticks = 0; /* just in case */ + if (toplevel_callback_pending()) { + ticks = 0; + } else if (run_timers(now, &next)) { + then = now; + now = GETTICKCOUNT(); + if (now - then > next - then) + ticks = 0; + else + ticks = next - now; } else { ticks = INFINITE; } @@ -576,6 +587,8 @@ int do_eventsel_loop(HANDLE other_event) sfree(handles); + run_toplevel_callbacks(); + if (n == WAIT_TIMEOUT) { now = next; } else { @@ -602,7 +615,7 @@ int ssh_sftp_loop_iteration(void) if (p_WSAEventSelect == NULL) { fd_set readfds; int ret; - long now = GETTICKCOUNT(); + unsigned long now = GETTICKCOUNT(), then; if (sftp_ssh_socket == INVALID_SOCKET) return -1; /* doom */ @@ -611,13 +624,17 @@ int ssh_sftp_loop_iteration(void) select_result((WPARAM) sftp_ssh_socket, (LPARAM) FD_WRITE); do { - long next, ticks; + unsigned long next; + 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;