Created new data types `Filename' and `FontSpec', intended to be
[u/mdw/putty] / puttygen.c
index 4e2098e..42af397 100644 (file)
@@ -22,6 +22,23 @@ static int requested_help;
 
 static char *cmdline_keyfile = NULL;
 
+/*
+ * Print a modal (Really Bad) message box and perform a fatal exit.
+ */
+void modalfatalbox(char *fmt, ...)
+{
+    va_list ap;
+    char *stuff;
+
+    va_start(ap, fmt);
+    stuff = dupvprintf(fmt, ap);
+    va_end(ap);
+    MessageBox(NULL, stuff, "PuTTYgen Fatal Error",
+              MB_SYSTEMMODAL | MB_ICONERROR | MB_OK);
+    sfree(stuff);
+    exit(1);
+}
+
 /* ----------------------------------------------------------------------
  * Progress report code. This is really horrible :-)
  */
@@ -185,10 +202,11 @@ static int prompt_keyfile(HWND hwnd, char *dlgtitle,
 #endif
     of.hwndOwner = hwnd;
     if (ppk) {
-       of.lpstrFilter = "PuTTY Private Key Files\0*.PPK\0All 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;
@@ -206,14 +224,6 @@ static int prompt_keyfile(HWND hwnd, char *dlgtitle,
 }
 
 /*
- * This function is needed to link with the DES code. We need not
- * have it do anything at all.
- */
-void logevent(char *msg)
-{
-}
-
-/*
  * Dialog-box function for the Licence box.
  */
 static int CALLBACK LicenceProc(HWND hwnd, UINT msg,
@@ -356,10 +366,8 @@ static void setupbigedit1(HWND hwnd, int id, int idstatic, struct RSAKey *key)
 
     dec1 = bignum_decimal(key->exponent);
     dec2 = bignum_decimal(key->modulus);
-    buffer = smalloc(strlen(dec1) + strlen(dec2) +
-                    strlen(key->comment) + 30);
-    sprintf(buffer, "%d %s %s %s",
-           bignum_bitcount(key->modulus), dec1, dec2, key->comment);
+    buffer = dupprintf("%d %s %s %s", bignum_bitcount(key->modulus),
+                      dec1, dec2, key->comment);
     SetDlgItemText(hwnd, id, buffer);
     SetDlgItemText(hwnd, idstatic,
                   "&Public key for pasting into authorized_keys file:");
@@ -613,7 +621,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;
@@ -624,7 +632,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)) {
@@ -644,12 +652,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;
@@ -668,17 +676,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;
@@ -932,7 +940,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:
@@ -1146,30 +1154,33 @@ static int CALLBACK MainDlgProc(HWND hwnd, UINT msg,
                    int ret;
                    FILE *fp = fopen(filename, "r");
                    if (fp) {
-                       char buffer[FILENAME_MAX + 80];
+                       char *buffer;
                        fclose(fp);
-                       sprintf(buffer, "Overwrite existing file\n%.*s?",
-                               FILENAME_MAX, filename);
+                       buffer = dupprintf("Overwrite existing file\n%s?",
+                                          filename);
                        ret = MessageBox(hwnd, buffer, "PuTTYgen Warning",
                                         MB_YESNO | MB_ICONWARNING);
+                       sfree(buffer);
                        if (ret != IDYES)
                            break;
                    }
 
                    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) {
@@ -1189,12 +1200,13 @@ static int CALLBACK MainDlgProc(HWND hwnd, UINT msg,
                    int ret;
                    FILE *fp = fopen(filename, "r");
                    if (fp) {
-                       char buffer[FILENAME_MAX + 80];
+                       char *buffer;
                        fclose(fp);
-                       sprintf(buffer, "Overwrite existing file\n%.*s?",
-                               FILENAME_MAX, filename);
+                       buffer = dupprintf("Overwrite existing file\n%s?",
+                                          filename);
                        ret = MessageBox(hwnd, buffer, "PuTTYgen Warning",
                                         MB_YESNO | MB_ICONWARNING);
+                       sfree(buffer);
                        if (ret != IDYES)
                            break;
                    }
@@ -1218,7 +1230,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;