~mdw
/
sgt
/
putty
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Add context help to a couple of message boxes. Unfortunately the ones
[sgt/putty]
/
windows
/
winsftp.c
diff --git
a/windows/winsftp.c
b/windows/winsftp.c
index
d9ea3ca
..
ff471dd
100644
(file)
--- a/
windows/winsftp.c
+++ b/
windows/winsftp.c
@@
-306,20
+306,26
@@
DirHandle *open_directory(char *name)
char *read_filename(DirHandle *dir)
{
char *read_filename(DirHandle *dir)
{
- while (!dir->name) {
- WIN32_FIND_DATA fdat;
- int ok = FindNextFile(dir->h, &fdat);
+ do {
- if (!ok)
- return NULL;
+ if (!dir->name) {
+ WIN32_FIND_DATA fdat;
+ int ok = FindNextFile(dir->h, &fdat);
+ if (!ok)
+ return NULL;
+ else
+ dir->name = dupstr(fdat.cFileName);
+ }
- if (fdat.cFileName[0] == '.' &&
- (fdat.cFileName[1] == '\0' ||
- (fdat.cFileName[1] == '.' && fdat.cFileName[2] == '\0')))
+ assert(dir->name);
+ if (dir->name[0] == '.' &&
+ (dir->name[1] == '\0' ||
+ (dir->name[1] == '.' && dir->name[2] == '\0'))) {
+ sfree(dir->name);
dir->name = NULL;
dir->name = NULL;
- else
- dir->name = dupstr(fdat.cFileName);
- }
+ }
+
+ }
while (!dir->name);
if (dir->name) {
char *ret = dir->name;
if (dir->name) {
char *ret = dir->name;
@@
-445,6
+451,17
@@
void finish_wildcard_matching(WildcardMatcher *dir)
sfree(dir);
}
sfree(dir);
}
+int vet_filename(char *name)
+{
+ if (strchr(name, '/') || strchr(name, '\\') || strchr(name, ':'))
+ return FALSE;
+
+ if (!name[strspn(name, ".")]) /* entirely composed of dots */
+ return FALSE;
+
+ return TRUE;
+}
+
int create_directory(char *name)
{
return CreateDirectory(name, NULL) != 0;
int create_directory(char *name)
{
return CreateDirectory(name, NULL) != 0;
@@
-462,7
+479,7
@@
char *dir_file_cat(char *dir, char *file)
/*
* Be told what socket we're supposed to be using.
*/
/*
* Be told what socket we're supposed to be using.
*/
-static SOCKET sftp_ssh_socket;
+static SOCKET sftp_ssh_socket
= INVALID_SOCKET
;
static HANDLE netevent = NULL;
char *do_select(SOCKET skt, int startup)
{
static HANDLE netevent = NULL;
char *do_select(SOCKET skt, int startup)
{
@@
-676,7
+693,7
@@
static DWORD WINAPI command_read_thread(void *param)
return 0;
}
return 0;
}
-char *ssh_sftp_get_cmdline(char *prompt)
+char *ssh_sftp_get_cmdline(char *prompt
, int no_fds_ok
)
{
int ret;
struct command_read_ctx actx, *ctx = &actx;
{
int ret;
struct command_read_ctx actx, *ctx = &actx;
@@
-685,7
+702,8
@@
char *ssh_sftp_get_cmdline(char *prompt)
fputs(prompt, stdout);
fflush(stdout);
fputs(prompt, stdout);
fflush(stdout);
- if (sftp_ssh_socket == INVALID_SOCKET || p_WSAEventSelect == NULL) {
+ if ((sftp_ssh_socket == INVALID_SOCKET && no_fds_ok) ||
+ p_WSAEventSelect == NULL) {
return fgetline(stdin); /* very simple */
}
return fgetline(stdin); /* very simple */
}