Fix breakage of `Restart Session' in r6802. When restarting the
[u/mdw/putty] / windows / window.c
index 0b928bd..963b5ba 100644 (file)
@@ -235,7 +235,7 @@ static void start_backend(void)
     if (error) {
        char *str = dupprintf("%s Error", appname);
        sprintf(msg, "Unable to open connection to\n"
-               "%.800s\n" "%s", cfg.host, error);
+               "%.800s\n" "%s", cfg_dest(&cfg), error);
        MessageBox(NULL, msg, str, MB_ICONERROR | MB_OK);
        sfree(str);
        exit(0);
@@ -272,6 +272,7 @@ static void start_backend(void)
        DeleteMenu(popup_menus[i].menu, IDM_RESTART, MF_BYCOMMAND);
     }
 
+    must_close_session = FALSE;
     session_closed = FALSE;
 }
 
@@ -409,7 +410,7 @@ int WINAPI WinMain(HINSTANCE inst, HINSTANCE prev, LPSTR cmdline, int show)
                i--;
            p[i] = '\0';
            do_defaults(p + 1, &cfg);
-           if (!*cfg.host && !do_config()) {
+           if (!cfg_launchable(&cfg) && !do_config()) {
                cleanup_exit(0);
            }
        } else if (*p == '&') {
@@ -554,7 +555,7 @@ int WINAPI WinMain(HINSTANCE inst, HINSTANCE prev, LPSTR cmdline, int show)
 
        cmdline_run_saved(&cfg);
 
-       if (!*cfg.host && !do_config()) {
+       if (!cfg_launchable(&cfg) && !do_config()) {
            cleanup_exit(0);
        }
 
@@ -836,9 +837,7 @@ int WINAPI WinMain(HINSTANCE inst, HINSTANCE prev, LPSTR cmdline, int show)
 
        sfree(handles);
 
-       if (GetMessage(&msg, NULL, 0, 0) != 1)
-           break;
-       do {
+       while (PeekMessage(&msg, NULL, 0, 0, PM_REMOVE)) {
            if (msg.message == WM_QUIT)
                goto finished;         /* two-level break */
 
@@ -852,7 +851,7 @@ int WINAPI WinMain(HINSTANCE inst, HINSTANCE prev, LPSTR cmdline, int show)
             */
            if (must_close_session)
                close_session();
-       } while (PeekMessage(&msg, NULL, 0, 0, PM_REMOVE));
+       }
 
        /* The messages seem unreliable; especially if we're being tricky */
        term_set_focus(term, GetForegroundWindow() == hwnd);
@@ -1966,11 +1965,11 @@ static LRESULT CALLBACK WndProc(HWND hwnd, UINT message,
                    sa.nLength = sizeof(sa);
                    sa.lpSecurityDescriptor = NULL;
                    sa.bInheritHandle = TRUE;
-                   filemap = CreateFileMapping((HANDLE) 0xFFFFFFFF,
+                   filemap = CreateFileMapping(INVALID_HANDLE_VALUE,
                                                &sa,
                                                PAGE_READWRITE,
                                                0, sizeof(Config), NULL);
-                   if (filemap) {
+                   if (filemap && filemap != INVALID_HANDLE_VALUE) {
                        p = (Config *) MapViewOfFile(filemap,
                                                     FILE_MAP_WRITE,
                                                     0, 0, sizeof(Config));