X-Git-Url: https://git.distorted.org.uk/u/mdw/putty/blobdiff_plain/e2210ffca4c853204284c05cf70066e734d01885..afb2076da15d8e2d22578c5e18edae725d085b4b:/pageant.c diff --git a/pageant.c b/pageant.c index 0f423f2d..2b77dfc7 100644 --- a/pageant.c +++ b/pageant.c @@ -15,6 +15,7 @@ #include "ssh.h" #include "misc.h" #include "tree234.h" +#include "winstuff.h" #define IDI_MAINICON 200 #define IDI_TRAYICON 201 @@ -606,7 +607,7 @@ static void add_keyfile(char *filename) agent_query(request, reqlen, &vresponse, &resplen); response = vresponse; if (resplen < 5 || response[4] != SSH_AGENT_SUCCESS) - MessageBox(NULL, "The already running Pageant" + MessageBox(NULL, "The already running Pageant " "refused to add the key.", APPNAME, MB_OK | MB_ICONERROR); @@ -1595,14 +1596,17 @@ static LRESULT CALLBACK WndProc(HWND hwnd, UINT message, keylist = CreateDialog(instance, MAKEINTRESOURCE(211), NULL, KeyListProc); ShowWindow(keylist, SW_SHOWNORMAL); - /* - * Sometimes the window comes up minimised / hidden - * for no obvious reason. Prevent this. - */ - SetForegroundWindow(keylist); - SetWindowPos(keylist, HWND_TOP, 0, 0, 0, 0, - SWP_NOMOVE | SWP_NOSIZE | SWP_SHOWWINDOW); } + /* + * Sometimes the window comes up minimised / hidden for + * no obvious reason. Prevent this. This also brings it + * to the front if it's already present (the user + * selected View Keys because they wanted to _see_ the + * thing). + */ + SetForegroundWindow(keylist); + SetWindowPos(keylist, HWND_TOP, 0, 0, 0, 0, + SWP_NOMOVE | SWP_NOSIZE | SWP_SHOWWINDOW); break; case IDM_ADDKEY: if (passphrase_box) { @@ -1786,6 +1790,8 @@ int WINAPI WinMain(HINSTANCE inst, HINSTANCE prev, LPSTR cmdline, int show) HMODULE advapi; char *command = NULL; int added_keys = 0; + int argc, i; + char **argv, **argstart; /* * Determine whether we're an NT system (should have security @@ -1936,46 +1942,23 @@ int WINAPI WinMain(HINSTANCE inst, HINSTANCE prev, LPSTR cmdline, int show) /* * Process the command line and add keys as listed on it. - * If we already determined that we need to spawn a program from above we - * need to ignore the first two arguments. [DBW] */ - { - char *p; - int inquotes = 0; - p = cmdline; - while (*p) { - while (*p && isspace(*p)) - p++; - if (*p && !isspace(*p)) { - char *q = p, *pp = p; - while (*p && (inquotes || !isspace(*p))) { - if (*p == '"') { - inquotes = !inquotes; - p++; - continue; - } - *pp++ = *p++; - } - if (*pp) { - if (*p) - p++; - *pp++ = '\0'; - } - if (!strcmp(q, "-c")) { - /* - * If we see `-c', then the rest of the - * command line should be treated as a - * command to be spawned. - */ - while (*p && isspace(*p)) - p++; - command = p; - break; - } else { - add_keyfile(q); - added_keys = TRUE; - } - } + split_into_argv(cmdline, &argc, &argv, &argstart); + for (i = 0; i < argc; i++) { + if (!strcmp(argv[i], "-c")) { + /* + * If we see `-c', then the rest of the + * command line should be treated as a + * command to be spawned. + */ + if (i < argc-1) + command = argstart[i+1]; + else + command = ""; + break; + } else { + add_keyfile(argv[i]); + added_keys = TRUE; } }