mirror of
https://git.tartarus.org/simon/putty.git
synced 2025-03-22 14:39:24 -05:00
New Windows utility function: request_file_w.
Just like the existing request_file, but wide-character oriented.
This commit is contained in:
parent
059f42aa56
commit
e1c6f61985
@ -395,6 +395,8 @@ void init_common_controls(void); /* also does some DLL-loading */
|
|||||||
*/
|
*/
|
||||||
typedef struct filereq_tag filereq; /* cwd for file requester */
|
typedef struct filereq_tag filereq; /* cwd for file requester */
|
||||||
bool request_file(filereq *state, OPENFILENAME *of, bool preserve, bool save);
|
bool request_file(filereq *state, OPENFILENAME *of, bool preserve, bool save);
|
||||||
|
bool request_file_w(filereq *state, OPENFILENAMEW *of,
|
||||||
|
bool preserve, bool save);
|
||||||
filereq *filereq_new(void);
|
filereq *filereq_new(void);
|
||||||
void filereq_free(filereq *state);
|
void filereq_free(filereq *state);
|
||||||
void pgp_fingerprints_msgbox(HWND owner);
|
void pgp_fingerprints_msgbox(HWND owner);
|
||||||
|
@ -9,6 +9,7 @@
|
|||||||
|
|
||||||
struct filereq_tag {
|
struct filereq_tag {
|
||||||
TCHAR cwd[MAX_PATH];
|
TCHAR cwd[MAX_PATH];
|
||||||
|
WCHAR wcwd[MAX_PATH];
|
||||||
};
|
};
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@ -58,10 +59,52 @@ bool request_file(filereq *state, OPENFILENAME *of, bool preserve, bool save)
|
|||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Here's the same one again, the wide-string version
|
||||||
|
*/
|
||||||
|
bool request_file_w(filereq *state, OPENFILENAMEW *of,
|
||||||
|
bool preserve, bool save)
|
||||||
|
{
|
||||||
|
WCHAR cwd[MAX_PATH]; /* process CWD */
|
||||||
|
bool ret;
|
||||||
|
|
||||||
|
/* Get process CWD */
|
||||||
|
if (preserve) {
|
||||||
|
DWORD r = GetCurrentDirectoryW(lenof(cwd), cwd);
|
||||||
|
if (r == 0 || r >= lenof(cwd))
|
||||||
|
/* Didn't work, oh well. Stop trying to be clever. */
|
||||||
|
preserve = false;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Open the file requester, maybe setting lpstrInitialDir */
|
||||||
|
{
|
||||||
|
of->lStructSize = sizeof(*of);
|
||||||
|
of->lpstrInitialDir = (state && state->wcwd[0]) ? state->wcwd : NULL;
|
||||||
|
/* Actually put up the requester. */
|
||||||
|
ret = save ? GetSaveFileNameW(of) : GetOpenFileNameW(of);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Get CWD left by requester */
|
||||||
|
if (state) {
|
||||||
|
DWORD r = GetCurrentDirectoryW(lenof(state->wcwd), state->wcwd);
|
||||||
|
if (r == 0 || r >= lenof(state->wcwd))
|
||||||
|
/* Didn't work, oh well. */
|
||||||
|
state->wcwd[0] = L'\0';
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Restore process CWD */
|
||||||
|
if (preserve)
|
||||||
|
/* If it fails, there's not much we can do. */
|
||||||
|
(void) SetCurrentDirectoryW(cwd);
|
||||||
|
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
filereq *filereq_new(void)
|
filereq *filereq_new(void)
|
||||||
{
|
{
|
||||||
filereq *state = snew(filereq);
|
filereq *state = snew(filereq);
|
||||||
state->cwd[0] = '\0';
|
state->cwd[0] = '\0';
|
||||||
|
state->wcwd[0] = L'\0';
|
||||||
return state;
|
return state;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user