Introduced wrapper macros snew(), snewn() and sresize() for the
[u/mdw/putty] / puttygen.c
index 7bfd1e6..e16b4f3 100644 (file)
 #include "ssh.h"
 #include "winstuff.h"
 
+#ifdef MSVC4
+#define ICON_BIG        1
+#endif
+
 #define WM_DONEKEY (WM_XUSER + 1)
 
 #define DEFAULT_KEYSIZE 1024
@@ -202,11 +206,11 @@ static int prompt_keyfile(HWND hwnd, char *dlgtitle,
 #endif
     of.hwndOwner = hwnd;
     if (ppk) {
-       of.lpstrFilter = "PuTTY Private Key Files (*.ppk)\0*.PPK\0"
-           "All Files\0*\0\0\0";
+       of.lpstrFilter = "PuTTY Private Key Files (*.ppk)\0*.ppk\0"
+           "All Files (*.*)\0*\0\0\0";
        of.lpstrDefExt = ".ppk";
     } else {
-       of.lpstrFilter = "All Files\0*\0\0\0";
+       of.lpstrFilter = "All Files (*.*)\0*\0\0\0";
     }
     of.lpstrCustomFilter = NULL;
     of.nFilterIndex = 1;
@@ -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;