Memory leak fix: repair endemic failure to call sftp_pkt_free().
[u/mdw/putty] / settings.c
index 90bb9ce..0340185 100644 (file)
@@ -198,6 +198,7 @@ void save_settings(char *section, int do_host, Config * cfg)
     write_setting_i(sesskey, "ComposeKey", cfg->compose_key);
     write_setting_i(sesskey, "CtrlAltKeys", cfg->ctrlaltkeys);
     write_setting_i(sesskey, "TelnetKey", cfg->telnet_keyboard);
+    write_setting_i(sesskey, "TelnetRet", cfg->telnet_newline);
     write_setting_i(sesskey, "LocalEcho", cfg->localecho);
     write_setting_i(sesskey, "LocalEdit", cfg->localedit);
     write_setting_s(sesskey, "Answerback", cfg->answerback);
@@ -265,6 +266,7 @@ void save_settings(char *section, int do_host, Config * cfg)
     write_setting_i(sesskey, "X11Forward", cfg->x11_forward);
     write_setting_s(sesskey, "X11Display", cfg->x11_display);
     write_setting_i(sesskey, "LocalPortAcceptAll", cfg->lport_acceptall);
+    write_setting_i(sesskey, "RemotePortAcceptAll", cfg->rport_acceptall);
     {
        char buf[2 * sizeof(cfg->portfwd)], *p, *q;
        p = buf;
@@ -387,6 +389,7 @@ void load_settings(char *section, int do_host, Config * cfg)
     gppi(sesskey, "ComposeKey", 0, &cfg->compose_key);
     gppi(sesskey, "CtrlAltKeys", 1, &cfg->ctrlaltkeys);
     gppi(sesskey, "TelnetKey", 0, &cfg->telnet_keyboard);
+    gppi(sesskey, "TelnetRet", 1, &cfg->telnet_newline);
     gppi(sesskey, "LocalEcho", LD_BACKEND, &cfg->localecho);
     gppi(sesskey, "LocalEdit", LD_BACKEND, &cfg->localedit);
     gpps(sesskey, "Answerback", "PuTTY", cfg->answerback,
@@ -501,6 +504,7 @@ void load_settings(char *section, int do_host, Config * cfg)
         sizeof(cfg->x11_display));
 
     gppi(sesskey, "LocalPortAcceptAll", 0, &cfg->lport_acceptall);
+    gppi(sesskey, "RemotePortAcceptAll", 0, &cfg->rport_acceptall);
     {
        char buf[2 * sizeof(cfg->portfwd)], *p, *q;
        gpps(sesskey, "PortForwardings", "", buf, sizeof(buf));
@@ -563,24 +567,23 @@ void get_sesslist(int allocate)
 
     if (allocate) {
 
-       if ((handle = enum_settings_start()) == NULL)
-           return;
-
        buflen = bufsize = 0;
        buffer = NULL;
-       do {
-           ret = enum_settings_next(handle, otherbuf, sizeof(otherbuf));
-           if (ret) {
-               int len = strlen(otherbuf) + 1;
-               if (bufsize < buflen + len) {
-                   bufsize = buflen + len + 2048;
-                   buffer = srealloc(buffer, bufsize);
+       if ((handle = enum_settings_start())) {
+           do {
+               ret = enum_settings_next(handle, otherbuf, sizeof(otherbuf));
+               if (ret) {
+                   int len = strlen(otherbuf) + 1;
+                   if (bufsize < buflen + len) {
+                       bufsize = buflen + len + 2048;
+                       buffer = srealloc(buffer, bufsize);
+                   }
+                   strcpy(buffer + buflen, otherbuf);
+                   buflen += strlen(buffer + buflen) + 1;
                }
-               strcpy(buffer + buflen, otherbuf);
-               buflen += strlen(buffer + buflen) + 1;
-           }
-       } while (ret);
-       enum_settings_finish(handle);
+           } while (ret);
+           enum_settings_finish(handle);
+       }
        buffer = srealloc(buffer, buflen + 1);
        buffer[buflen] = '\0';