At least one version of gcc won't figure out that "clear" is never
[u/mdw/putty] / config.c
index 1fedd28..85e13c2 100644 (file)
--- a/config.c
+++ b/config.c
@@ -623,7 +623,7 @@ static void colour_handler(union control *ctrl, void *dlg,
     Config *cfg = (Config *)data;
     struct colour_data *cd =
        (struct colour_data *)ctrl->generic.context.p;
-    int update = FALSE, r, g, b;
+    int update = FALSE, clear = FALSE, r, g, b;
 
     if (event == EVENT_REFRESH) {
        if (ctrl == cd->listbox) {
@@ -633,21 +633,21 @@ static void colour_handler(union control *ctrl, void *dlg,
            for (i = 0; i < lenof(colours); i++)
                dlg_listbox_add(ctrl, dlg, colours[i]);
            dlg_update_done(ctrl, dlg);
-           dlg_editbox_set(cd->redit, dlg, "");
-           dlg_editbox_set(cd->gedit, dlg, "");
-           dlg_editbox_set(cd->bedit, dlg, "");
+           clear = TRUE;
+           update = TRUE;
        }
     } else if (event == EVENT_SELCHANGE) {
        if (ctrl == cd->listbox) {
            /* The user has selected a colour. Update the RGB text. */
            int i = dlg_listbox_index(ctrl, dlg);
            if (i < 0) {
-               dlg_beep(dlg);
-               return;
+               clear = TRUE;
+           } else {
+               clear = FALSE;
+               r = cfg->colours[i][0];
+               g = cfg->colours[i][1];
+               b = cfg->colours[i][2];
            }
-           r = cfg->colours[i][0];
-           g = cfg->colours[i][1];
-           b = cfg->colours[i][2];
            update = TRUE;
        }
     } else if (event == EVENT_VALCHANGE) {
@@ -700,16 +700,23 @@ static void colour_handler(union control *ctrl, void *dlg,
                cfg->colours[i][0] = r;
                cfg->colours[i][1] = g;
                cfg->colours[i][2] = b;
+               clear = FALSE;
                update = TRUE;
            }
        }
     }
 
     if (update) {
-       char buf[40];
-       sprintf(buf, "%d", r); dlg_editbox_set(cd->redit, dlg, buf);
-       sprintf(buf, "%d", g); dlg_editbox_set(cd->gedit, dlg, buf);
-       sprintf(buf, "%d", b); dlg_editbox_set(cd->bedit, dlg, buf);
+       if (clear) {
+           dlg_editbox_set(cd->redit, dlg, "");
+           dlg_editbox_set(cd->gedit, dlg, "");
+           dlg_editbox_set(cd->bedit, dlg, "");
+       } else {
+           char buf[40];
+           sprintf(buf, "%d", r); dlg_editbox_set(cd->redit, dlg, buf);
+           sprintf(buf, "%d", g); dlg_editbox_set(cd->gedit, dlg, buf);
+           sprintf(buf, "%d", b); dlg_editbox_set(cd->bedit, dlg, buf);
+       }
     }
 }
 
@@ -1049,7 +1056,9 @@ static void portfwd_handler(union control *ctrl, void *dlg,
                {
                    static const char *const afs = "A46";
                    char *afp = strchr(afs, *p);
+#ifndef NO_IPV6
                    int idx = afp ? afp-afs : 0;
+#endif
                    if (afp)
                        p++;
 #ifndef NO_IPV6
@@ -1310,6 +1319,9 @@ void setup_config_box(struct controlbox *b, int midsession,
     ctrl_checkbox(s, "Implicit CR in every LF", 'r',
                  HELPCTX(terminal_lfhascr),
                  dlg_stdcheckbox_handler, I(offsetof(Config,lfhascr)));
+    ctrl_checkbox(s, "Implicit LF in every CR", 'f',
+                 HELPCTX(terminal_crhaslf),
+                 dlg_stdcheckbox_handler, I(offsetof(Config,crhaslf)));
     ctrl_checkbox(s, "Use background colour to erase screen", 'e',
                  HELPCTX(terminal_bce),
                  dlg_stdcheckbox_handler, I(offsetof(Config,bce)));
@@ -1716,6 +1728,14 @@ void setup_config_box(struct controlbox *b, int midsession,
                          "IPv6", '6', I(ADDRTYPE_IPV6),
                          NULL);
 #endif
+
+           s = ctrl_getset(b, "Connection", "identity",
+                           "Logical name of remote host");
+           ctrl_editbox(s, "Logical name of remote host (e.g. for SSH key lookup):",
+                        'm', 100,
+                        HELPCTX(connection_loghost),
+                        dlg_stdeditbox_handler, I(offsetof(Config,loghost)),
+                        I(sizeof(((Config *)0)->loghost)));
        }
 
        /*
@@ -2240,6 +2260,9 @@ void setup_config_box(struct controlbox *b, int midsession,
            ctrl_droplist(s, "Handles SSH-2 key re-exchange badly", 'k', 20,
                          HELPCTX(ssh_bugs_rekey2),
                          sshbug_handler, I(offsetof(Config,sshbug_rekey2)));
+           ctrl_droplist(s, "Ignores SSH-2 maximum packet size", 'x', 20,
+                         HELPCTX(ssh_bugs_maxpkt2),
+                         sshbug_handler, I(offsetof(Config,sshbug_maxpkt2)));
        }
     }
 }