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);