Created new data types `Filename' and `FontSpec', intended to be
[u/mdw/putty] / pageant.c
index b8a4bd8..73e950c 100644 (file)
--- a/pageant.c
+++ b/pageant.c
@@ -12,6 +12,7 @@
 #include <assert.h>
 #include <tchar.h>
 
+#include "putty.h"
 #include "ssh.h"
 #include "misc.h"
 #include "tree234.h"
@@ -65,13 +66,14 @@ static int initial_menuitems_count;
 void modalfatalbox(char *fmt, ...)
 {
     va_list ap;
-    char stuff[200];
+    char *buf;
 
     va_start(ap, fmt);
-    vsprintf(stuff, fmt, ap);
+    buf = dupvprintf(fmt, ap);
     va_end(ap);
-    MessageBox(main_hwnd, stuff, "Pageant Fatal Error",
+    MessageBox(main_hwnd, buf, "Pageant Fatal Error",
               MB_SYSTEMMODAL | MB_ICONERROR | MB_OK);
+    sfree(buf);
     exit(1);
 }
 
@@ -389,7 +391,7 @@ static void keylist_update(void)
 /*
  * This function loads a key from a file and adds it.
  */
-static void add_keyfile(char *filename)
+static void add_keyfile(Filename filename)
 {
     char passphrase[PASSPHRASE_MAXLEN];
     struct RSAKey *rkey = NULL;
@@ -402,7 +404,7 @@ static void add_keyfile(char *filename)
     int type;
     int original_pass;
        
-    type = key_type(filename);
+    type = key_type(&filename);
     if (type != SSH_KEYTYPE_SSH1 && type != SSH_KEYTYPE_SSH2) {
        char msg[256];
        sprintf(msg, "Couldn't load this key (%s)", key_type_to_str(type));
@@ -420,7 +422,7 @@ static void add_keyfile(char *filename)
        int i, nkeys, bloblen;
 
        if (type == SSH_KEYTYPE_SSH1) {
-           if (!rsakey_pubblob(filename, &blob, &bloblen)) {
+           if (!rsakey_pubblob(&filename, &blob, &bloblen)) {
                MessageBox(NULL, "Couldn't load private key.", APPNAME,
                           MB_OK | MB_ICONERROR);
                return;
@@ -428,7 +430,7 @@ static void add_keyfile(char *filename)
            keylist = get_keylist1();
        } else {
            unsigned char *blob2;
-           blob = ssh2_userkey_loadpub(filename, NULL, &bloblen);
+           blob = ssh2_userkey_loadpub(&filename, NULL, &bloblen);
            if (!blob) {
                MessageBox(NULL, "Couldn't load private key.", APPNAME,
                           MB_OK | MB_ICONERROR);
@@ -470,9 +472,9 @@ static void add_keyfile(char *filename)
     }
 
     if (type == SSH_KEYTYPE_SSH1)
-       needs_pass = rsakey_encrypted(filename, &comment);
+       needs_pass = rsakey_encrypted(&filename, &comment);
     else
-       needs_pass = ssh2_userkey_encrypted(filename, &comment);
+       needs_pass = ssh2_userkey_encrypted(&filename, &comment);
     attempts = 0;
     if (type == SSH_KEYTYPE_SSH1)
        rkey = smalloc(sizeof(*rkey));
@@ -502,9 +504,9 @@ static void add_keyfile(char *filename)
        } else
            *passphrase = '\0';
        if (type == SSH_KEYTYPE_SSH1)
-           ret = loadrsakey(filename, rkey, passphrase);
+           ret = loadrsakey(&filename, rkey, passphrase);
        else {
-           skey = ssh2_load_userkey(filename, passphrase);
+           skey = ssh2_load_userkey(&filename, passphrase);
            if (skey == SSH2_WRONG_PASSPHRASE)
                ret = -1;
            else if (!skey)
@@ -1249,7 +1251,8 @@ static void prompt_add_keyfile(void)
     of.lStructSize = sizeof(of);
 #endif
     of.hwndOwner = main_hwnd;
-    of.lpstrFilter = "PuTTY Private Key Files\0*.PPK\0AllFiles\0*\0\0\0";
+    of.lpstrFilter = "PuTTY Private Key Files (*.ppk)\0*.ppk\0"
+       "All Files (*.*)\0*\0\0\0";
     of.lpstrCustomFilter = NULL;
     of.nFilterIndex = 1;
     of.lpstrFile = filelist;
@@ -1262,7 +1265,7 @@ static void prompt_add_keyfile(void)
     if (GetOpenFileName(&of)) {
        if(strlen(filelist) > of.nFileOffset)
            /* Only one filename returned? */
-           add_keyfile(filelist);
+           add_keyfile(filename_from_str(filelist));
        else {
            /* we are returned a bunch of strings, end to
             * end. first string is the directory, the
@@ -1290,7 +1293,7 @@ static void prompt_add_keyfile(void)
                memcpy(filename + dirlen, filewalker, n);
                filewalker += n;
 
-               add_keyfile(filename);
+               add_keyfile(filename_from_str(filename));
            }
        }
 
@@ -1781,10 +1784,11 @@ void spawn_cmd(char *cmdline, char * args, int show)
 {
     if (ShellExecute(NULL, _T("open"), cmdline,
                     args, NULL, show) <= (HINSTANCE) 32) {
-       TCHAR sMsg[140];
-       sprintf(sMsg, _T("Failed to run \"%.100s\", Error: %d"), cmdline,
-               (int)GetLastError());
-       MessageBox(NULL, sMsg, APPNAME, MB_OK | MB_ICONEXCLAMATION);
+       char *msg;
+       msg = dupprintf("Failed to run \"%.100s\", Error: %d", cmdline,
+                       (int)GetLastError());
+       MessageBox(NULL, msg, APPNAME, MB_OK | MB_ICONEXCLAMATION);
+       sfree(msg);
     }
 }
 
@@ -1965,7 +1969,7 @@ int WINAPI WinMain(HINSTANCE inst, HINSTANCE prev, LPSTR cmdline, int show)
                command = "";
            break;
        } else {
-           add_keyfile(argv[i]);
+           add_keyfile(filename_from_str(argv[i]));
            added_keys = TRUE;
        }
     }