Yesterday's proxy enhancements also slightly nadgered the config
[u/mdw/putty] / settings.c
index a4c514f..216a3ee 100644 (file)
@@ -141,15 +141,17 @@ static void wprefs(void *sesskey, char *name,
     write_setting_s(sesskey, name, buf);
 }
 
-void save_settings(char *section, int do_host, Config * cfg)
+char *save_settings(char *section, int do_host, Config * cfg)
 {
     void *sesskey;
+    char *errmsg;
 
-    sesskey = open_settings_w(section);
+    sesskey = open_settings_w(section, &errmsg);
     if (!sesskey)
-       return;
+       return errmsg;
     save_open_settings(sesskey, do_host, cfg);
     close_settings_w(sesskey);
+    return NULL;
 }
 
 void save_open_settings(void *sesskey, int do_host, Config *cfg)
@@ -186,13 +188,12 @@ void save_open_settings(void *sesskey, int do_host, Config *cfg)
     write_setting_s(sesskey, "ProxyExcludeList", cfg->proxy_exclude_list);
     write_setting_i(sesskey, "ProxyDNS", (cfg->proxy_dns+2)%3);
     write_setting_i(sesskey, "ProxyLocalhost", cfg->even_proxy_localhost);
-    write_setting_i(sesskey, "ProxyType", cfg->proxy_type);
+    write_setting_i(sesskey, "ProxyMethod", cfg->proxy_type);
     write_setting_s(sesskey, "ProxyHost", cfg->proxy_host);
     write_setting_i(sesskey, "ProxyPort", cfg->proxy_port);
     write_setting_s(sesskey, "ProxyUsername", cfg->proxy_username);
     write_setting_s(sesskey, "ProxyPassword", cfg->proxy_password);
     write_setting_s(sesskey, "ProxyTelnetCommand", cfg->proxy_telnet_command);
-    write_setting_i(sesskey, "ProxySOCKSVersion", cfg->proxy_socks_version);
 
     {
        char buf[2 * sizeof(cfg->environmt)], *p, *q;
@@ -238,6 +239,7 @@ void save_open_settings(void *sesskey, int do_host, Config *cfg)
     write_setting_i(sesskey, "NoRemoteResize", cfg->no_remote_resize);
     write_setting_i(sesskey, "NoAltScreen", cfg->no_alt_screen);
     write_setting_i(sesskey, "NoRemoteWinTitle", cfg->no_remote_wintitle);
+    write_setting_i(sesskey, "NoRemoteQTitle", cfg->no_remote_qtitle);
     write_setting_i(sesskey, "NoDBackspace", cfg->no_dbackspace);
     write_setting_i(sesskey, "NoRemoteCharset", cfg->no_remote_charset);
     write_setting_i(sesskey, "ApplicationCursorKeys", cfg->app_cursor);
@@ -309,6 +311,7 @@ void save_open_settings(void *sesskey, int do_host, Config *cfg)
     write_setting_i(sesskey, "ScrollBarFullScreen", cfg->scrollbar_in_fullscreen);
     write_setting_i(sesskey, "ScrollOnKey", cfg->scroll_on_key);
     write_setting_i(sesskey, "ScrollOnDisp", cfg->scroll_on_disp);
+    write_setting_i(sesskey, "EraseToScrollback", cfg->erase_to_scrollback);
     write_setting_i(sesskey, "LockSize", cfg->resize_action);
     write_setting_i(sesskey, "BCE", cfg->bce);
     write_setting_i(sesskey, "BlinkText", cfg->blinktext);
@@ -343,6 +346,7 @@ void save_open_settings(void *sesskey, int do_host, Config *cfg)
     write_setting_i(sesskey, "BugDeriveKey2", 2-cfg->sshbug_derivekey2);
     write_setting_i(sesskey, "BugRSAPad2", 2-cfg->sshbug_rsapad2);
     write_setting_i(sesskey, "BugDHGEx2", 2-cfg->sshbug_dhgex2);
+    write_setting_i(sesskey, "BugPKSessID2", 2-cfg->sshbug_pksessid2);
     write_setting_i(sesskey, "StampUtmp", cfg->stamp_utmp);
     write_setting_i(sesskey, "LoginShell", cfg->login_shell);
     write_setting_i(sesskey, "ScrollbarOnLeft", cfg->scrollbar_on_left);
@@ -409,7 +413,26 @@ void load_open_settings(void *sesskey, int do_host, Config *cfg)
         sizeof(cfg->proxy_exclude_list));
     gppi(sesskey, "ProxyDNS", 1, &i); cfg->proxy_dns = (i+1)%3;
     gppi(sesskey, "ProxyLocalhost", 0, &cfg->even_proxy_localhost);
-    gppi(sesskey, "ProxyType", PROXY_NONE, &cfg->proxy_type);
+    gppi(sesskey, "ProxyMethod", -1, &cfg->proxy_type);
+    if (cfg->proxy_type == -1) {
+        int i;
+        gppi(sesskey, "ProxyType", -1, &i);
+        if (i == 0)
+            cfg->proxy_type = PROXY_NONE;
+        else if (i == 1)
+            cfg->proxy_type = PROXY_HTTP;
+        else if (i == 3)
+            cfg->proxy_type = PROXY_TELNET;
+        else if (i == 4)
+            cfg->proxy_type = PROXY_CMD;
+        else {
+            gppi(sesskey, "ProxySOCKSVersion", 5, &i);
+            if (i == 5)
+                cfg->proxy_type = PROXY_SOCKS5;
+            else
+                cfg->proxy_type = PROXY_SOCKS4;
+        }
+    }
     gpps(sesskey, "ProxyHost", "proxy", cfg->proxy_host,
         sizeof(cfg->proxy_host));
     gppi(sesskey, "ProxyPort", 80, &cfg->proxy_port);
@@ -419,7 +442,6 @@ void load_open_settings(void *sesskey, int do_host, Config *cfg)
         sizeof(cfg->proxy_password));
     gpps(sesskey, "ProxyTelnetCommand", "connect %host %port\\n",
         cfg->proxy_telnet_command, sizeof(cfg->proxy_telnet_command));
-    gppi(sesskey, "ProxySOCKSVersion", 5, &cfg->proxy_socks_version);
 
     {
        char buf[2 * sizeof(cfg->environmt)], *p, *q;
@@ -468,6 +490,7 @@ void load_open_settings(void *sesskey, int do_host, Config *cfg)
     gppi(sesskey, "NoRemoteResize", 0, &cfg->no_remote_resize);
     gppi(sesskey, "NoAltScreen", 0, &cfg->no_alt_screen);
     gppi(sesskey, "NoRemoteWinTitle", 0, &cfg->no_remote_wintitle);
+    gppi(sesskey, "NoRemoteQTitle", 1, &cfg->no_remote_qtitle);
     gppi(sesskey, "NoDBackspace", 0, &cfg->no_dbackspace);
     gppi(sesskey, "NoRemoteCharset", 0, &cfg->no_remote_charset);
     gppi(sesskey, "ApplicationCursorKeys", 0, &cfg->app_cursor);
@@ -571,6 +594,7 @@ void load_open_settings(void *sesskey, int do_host, Config *cfg)
     gppi(sesskey, "ScrollBarFullScreen", 0, &cfg->scrollbar_in_fullscreen);
     gppi(sesskey, "ScrollOnKey", 0, &cfg->scroll_on_key);
     gppi(sesskey, "ScrollOnDisp", 1, &cfg->scroll_on_disp);
+    gppi(sesskey, "EraseToScrollback", 1, &cfg->erase_to_scrollback);
     gppi(sesskey, "LockSize", 0, &cfg->resize_action);
     gppi(sesskey, "BCE", 1, &cfg->bce);
     gppi(sesskey, "BlinkText", 0, &cfg->blinktext);
@@ -616,19 +640,19 @@ void load_open_settings(void *sesskey, int do_host, Config *cfg)
     gppi(sesskey, "BugDeriveKey2", 0, &i); cfg->sshbug_derivekey2 = 2-i;
     gppi(sesskey, "BugRSAPad2", 0, &i); cfg->sshbug_rsapad2 = 2-i;
     gppi(sesskey, "BugDHGEx2", 0, &i); cfg->sshbug_dhgex2 = 2-i;
+    gppi(sesskey, "BugPKSessID2", 0, &i); cfg->sshbug_pksessid2 = 2-i;
     gppi(sesskey, "StampUtmp", 1, &cfg->stamp_utmp);
     gppi(sesskey, "LoginShell", 1, &cfg->login_shell);
     gppi(sesskey, "ScrollbarOnLeft", 0, &cfg->scrollbar_on_left);
     gppfont(sesskey, "BoldFont", &cfg->boldfont);
+    gppfont(sesskey, "WideFont", &cfg->widefont);
+    gppfont(sesskey, "WideBoldFont", &cfg->wideboldfont);
     gppi(sesskey, "ShadowBoldOffset", 1, &cfg->shadowboldoffset);
 }
 
 void do_defaults(char *session, Config * cfg)
 {
-    if (session)
-       load_settings(session, TRUE, cfg);
-    else
-       load_settings("Default Settings", FALSE, cfg);
+    load_settings(session, (session != NULL && *session), cfg);
 }
 
 static int sessioncmp(const void *av, const void *bv)
@@ -669,7 +693,7 @@ void get_sesslist(struct sesslist *list, int allocate)
                    int len = strlen(otherbuf) + 1;
                    if (bufsize < buflen + len) {
                        bufsize = buflen + len + 2048;
-                       list->buffer = srealloc(list->buffer, bufsize);
+                       list->buffer = sresize(list->buffer, bufsize, char);
                    }
                    strcpy(list->buffer + buflen, otherbuf);
                    buflen += strlen(list->buffer + buflen) + 1;
@@ -677,7 +701,7 @@ void get_sesslist(struct sesslist *list, int allocate)
            } while (ret);
            enum_settings_finish(handle);
        }
-       list->buffer = srealloc(list->buffer, buflen + 1);
+       list->buffer = sresize(list->buffer, buflen + 1, char);
        list->buffer[buflen] = '\0';
 
        /*
@@ -696,7 +720,7 @@ void get_sesslist(struct sesslist *list, int allocate)
            p++;
        }
 
-       list->sessions = smalloc((list->nsessions + 1) * sizeof(char *));
+       list->sessions = snewn(list->nsessions + 1, char *);
        list->sessions[0] = "Default Settings";
        p = list->buffer;
        i = 1;