X-Git-Url: https://git.distorted.org.uk/u/mdw/putty/blobdiff_plain/b1ccd98e147aa08c5993d7aab6341d63289b7ddb..3d88e64dfcf5dc0fd361ce0c504c67a9196ce44c:/puttygen.c diff --git a/puttygen.c b/puttygen.c index fd713e0f..e16b4f3d 100644 --- a/puttygen.c +++ b/puttygen.c @@ -14,6 +14,10 @@ #include "ssh.h" #include "winstuff.h" +#ifdef MSVC4 +#define ICON_BIG 1 +#endif + #define WM_DONEKEY (WM_XUSER + 1) #define DEFAULT_KEYSIZE 1024 @@ -293,7 +297,7 @@ static int CALLBACK AboutProc(HWND hwnd, UINT msg, return 0; case 101: EnableWindow(hwnd, 0); - DialogBox(hinst, MAKEINTRESOURCE(214), NULL, LicenceProc); + DialogBox(hinst, MAKEINTRESOURCE(214), hwnd, LicenceProc); EnableWindow(hwnd, 1); SetActiveWindow(hwnd); return 0; @@ -385,8 +389,8 @@ static void setupbigedit2(HWND hwnd, int id, int idstatic, int i; pub_blob = key->alg->public_blob(key->data, &pub_len); - buffer = smalloc(strlen(key->alg->name) + 4 * ((pub_len + 2) / 3) + - strlen(key->comment) + 3); + buffer = snewn(strlen(key->alg->name) + 4 * ((pub_len + 2) / 3) + + strlen(key->comment) + 3, char); strcpy(buffer, key->alg->name); p = buffer + strlen(buffer); *p++ = ' '; @@ -621,7 +625,7 @@ void ui_set_state(HWND hwnd, struct MainDlgState *state, int status) } void load_key_file(HWND hwnd, struct MainDlgState *state, - char *filename, int was_import_cmd) + Filename filename, int was_import_cmd) { char passphrase[PASSPHRASE_MAXLEN]; int needs_pass; @@ -632,7 +636,7 @@ void load_key_file(HWND hwnd, struct MainDlgState *state, struct RSAKey newkey1; struct ssh2_userkey *newkey2 = NULL; - type = realtype = key_type(filename); + type = realtype = key_type(&filename); if (type != SSH_KEYTYPE_SSH1 && type != SSH_KEYTYPE_SSH2 && !import_possible(type)) { @@ -652,12 +656,12 @@ void load_key_file(HWND hwnd, struct MainDlgState *state, comment = NULL; if (realtype == SSH_KEYTYPE_SSH1) - needs_pass = rsakey_encrypted(filename, &comment); + needs_pass = rsakey_encrypted(&filename, &comment); else if (realtype == SSH_KEYTYPE_SSH2) needs_pass = - ssh2_userkey_encrypted(filename, &comment); + ssh2_userkey_encrypted(&filename, &comment); else - needs_pass = import_encrypted(filename, realtype, + needs_pass = import_encrypted(&filename, realtype, &comment); pps.passphrase = passphrase; pps.comment = comment; @@ -676,17 +680,17 @@ void load_key_file(HWND hwnd, struct MainDlgState *state, *passphrase = '\0'; if (type == SSH_KEYTYPE_SSH1) { if (realtype == type) - ret = loadrsakey(filename, &newkey1, + ret = loadrsakey(&filename, &newkey1, passphrase); else - ret = import_ssh1(filename, realtype, + ret = import_ssh1(&filename, realtype, &newkey1, passphrase); } else { if (realtype == type) - newkey2 = ssh2_load_userkey(filename, + newkey2 = ssh2_load_userkey(&filename, passphrase); else - newkey2 = import_ssh2(filename, realtype, + newkey2 = import_ssh2(&filename, realtype, passphrase); if (newkey2 == SSH2_WRONG_PASSPHRASE) ret = -1; @@ -813,8 +817,10 @@ static int CALLBACK MainDlgProc(HWND hwnd, UINT msg, */ } requested_help = FALSE; + SendMessage(hwnd, WM_SETICON, (WPARAM) ICON_BIG, + (LPARAM) LoadIcon(hinst, MAKEINTRESOURCE(200))); - state = smalloc(sizeof(*state)); + state = snew(struct MainDlgState); state->generation_thread_exists = FALSE; state->collecting_entropy = FALSE; state->entropy = NULL; @@ -940,7 +946,7 @@ static int CALLBACK MainDlgProc(HWND hwnd, UINT msg, * Load a key file if one was provided on the command line. */ if (cmdline_keyfile) - load_key_file(hwnd, state, cmdline_keyfile, 0); + load_key_file(hwnd, state, filename_from_str(cmdline_keyfile), 0); return 1; case WM_MOUSEMOVE: @@ -968,7 +974,7 @@ static int CALLBACK MainDlgProc(HWND hwnd, UINT msg, MAKELPARAM(0, PROGRESSRANGE)); SendDlgItemMessage(hwnd, IDC_PROGRESS, PBM_SETPOS, 0, 0); - params = smalloc(sizeof(*params)); + params = snew(struct rsa_key_thread_params); params->progressbar = GetDlgItem(hwnd, IDC_PROGRESS); params->dialog = hwnd; params->keysize = state->keysize; @@ -1015,7 +1021,7 @@ static int CALLBACK MainDlgProc(HWND hwnd, UINT msg, int len = GetWindowTextLength(editctl); if (*state->commentptr) sfree(*state->commentptr); - *state->commentptr = smalloc(len + 1); + *state->commentptr = snewn(len + 1, char); GetWindowText(editctl, *state->commentptr, len + 1); if (state->ssh2) { setupbigedit2(hwnd, IDC_KEYDISPLAY, IDC_PKSTATIC, @@ -1029,7 +1035,7 @@ static int CALLBACK MainDlgProc(HWND hwnd, UINT msg, break; case IDC_ABOUT: EnableWindow(hwnd, 0); - DialogBox(hinst, MAKEINTRESOURCE(213), NULL, AboutProc); + DialogBox(hinst, MAKEINTRESOURCE(213), hwnd, AboutProc); EnableWindow(hwnd, 1); SetActiveWindow(hwnd); return 0; @@ -1044,6 +1050,9 @@ static int CALLBACK MainDlgProc(HWND hwnd, UINT msg, } return 0; case IDC_GENERATE: + if (HIWORD(wParam) != BN_CLICKED && + HIWORD(wParam) != BN_DOUBLECLICKED) + break; state = (struct MainDlgState *) GetWindowLong(hwnd, GWL_USERDATA); if (!state->generation_thread_exists) { @@ -1087,8 +1096,8 @@ static int CALLBACK MainDlgProc(HWND hwnd, UINT msg, state->entropy_required = (state->keysize / 2) * 2; state->entropy_got = 0; state->entropy_size = (state->entropy_required * - sizeof(*state->entropy)); - state->entropy = smalloc(state->entropy_size); + sizeof(unsigned)); + state->entropy = snewn(state->entropy_required, unsigned); SendDlgItemMessage(hwnd, IDC_PROGRESS, PBM_SETRANGE, 0, MAKELPARAM(0, state->entropy_required)); @@ -1166,19 +1175,21 @@ static int CALLBACK MainDlgProc(HWND hwnd, UINT msg, } if (state->ssh2) { + Filename fn = filename_from_str(filename); if (type != realtype) - ret = export_ssh2(filename, type, &state->ssh2key, + ret = export_ssh2(&fn, type, &state->ssh2key, *passphrase ? passphrase : NULL); else - ret = ssh2_save_userkey(filename, &state->ssh2key, + ret = ssh2_save_userkey(&fn, &state->ssh2key, *passphrase ? passphrase : NULL); } else { + Filename fn = filename_from_str(filename); if (type != realtype) - ret = export_ssh1(filename, type, &state->key, + ret = export_ssh1(&fn, type, &state->key, *passphrase ? passphrase : NULL); else - ret = saversakey(filename, &state->key, + ret = saversakey(&fn, &state->key, *passphrase ? passphrase : NULL); } if (ret <= 0) { @@ -1228,7 +1239,7 @@ static int CALLBACK MainDlgProc(HWND hwnd, UINT msg, char filename[FILENAME_MAX]; if (prompt_keyfile(hwnd, "Load private key:", filename, 0, LOWORD(wParam)==IDC_LOAD)) - load_key_file(hwnd, state, filename, + load_key_file(hwnd, state, filename_from_str(filename), LOWORD(wParam) != IDC_LOAD); } break; @@ -1259,7 +1270,7 @@ static int CALLBACK MainDlgProc(HWND hwnd, UINT msg, * the user will immediately want to change it, which is * what we want :-) */ - *state->commentptr = smalloc(30); + *state->commentptr = snewn(30, char); { time_t t; struct tm *tm;