2 * winsftp.c: the Windows-specific parts of PSFTP.
11 * Be told what socket we're supposed to be using.
13 static SOCKET sftp_ssh_socket
;
14 char *do_select(SOCKET skt
, int startup
)
17 sftp_ssh_socket
= skt
;
19 sftp_ssh_socket
= INVALID_SOCKET
;
22 extern int select_result(WPARAM
, LPARAM
);
25 * Initialize the WinSock driver.
27 static void init_winsock(void)
32 winsock_ver
= MAKEWORD(1, 1);
33 if (WSAStartup(winsock_ver
, &wsadata
)) {
34 fprintf(stderr
, "Unable to initialise WinSock");
37 if (LOBYTE(wsadata
.wVersion
) != 1 || HIBYTE(wsadata
.wVersion
) != 1) {
38 fprintf(stderr
, "WinSock version is incompatible with 1.1");
44 * Set local current directory. Returns NULL on success, or else an
45 * error message which must be freed after printing.
47 char *psftp_lcd(char *dir
)
51 if (!SetCurrentDirectory(dir
)) {
54 FormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER
|
55 FORMAT_MESSAGE_FROM_SYSTEM
|
56 FORMAT_MESSAGE_IGNORE_INSERTS
,
58 MAKELANGID(LANG_NEUTRAL
, SUBLANG_DEFAULT
),
59 (LPTSTR
)&message
, 0, NULL
);
60 i
= strcspn((char *)message
, "\n");
61 ret
= dupprintf("%.*s", i
, (LPCTSTR
)message
);
69 * Get local current directory. Returns a string which must be
72 char *psftp_getcwd(void)
74 char *ret
= snewn(256, char);
75 int len
= GetCurrentDirectory(256, ret
);
77 ret
= sresize(ret
, len
, char);
78 GetCurrentDirectory(len
, ret
);
83 * Wait for some network data and process it.
85 int ssh_sftp_loop_iteration(void)
89 if (sftp_ssh_socket
== INVALID_SOCKET
)
93 FD_SET(sftp_ssh_socket
, &readfds
);
94 if (select(1, &readfds
, NULL
, NULL
, NULL
) < 0)
97 select_result((WPARAM
) sftp_ssh_socket
, (LPARAM
) FD_READ
);
102 * Main program. Parse arguments etc.
104 int main(int argc
, char *argv
[])
109 ret
= psftp_main(argc
, argv
);