diff --git a/settings.c b/settings.c index 266e37f5..3ebcbb1f 100644 --- a/settings.c +++ b/settings.c @@ -565,24 +565,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'; diff --git a/winstore.c b/winstore.c index 651fbad6..d4800796 100644 --- a/winstore.c +++ b/winstore.c @@ -181,7 +181,7 @@ void *enum_settings_start(void) struct enumsettings *ret; HKEY key; - if (RegCreateKey(HKEY_CURRENT_USER, puttystr, &key) != ERROR_SUCCESS) + if (RegOpenKey(HKEY_CURRENT_USER, puttystr, &key) != ERROR_SUCCESS) return NULL; ret = smalloc(sizeof(*ret)); @@ -246,8 +246,8 @@ int verify_host_key(char *hostname, int port, char *keytype, char *key) hostkey_regname(regname, hostname, port, keytype); - if (RegCreateKey(HKEY_CURRENT_USER, PUTTY_REG_POS "\\SshHostKeys", - &rkey) != ERROR_SUCCESS) + if (RegOpenKey(HKEY_CURRENT_USER, PUTTY_REG_POS "\\SshHostKeys", + &rkey) != ERROR_SUCCESS) return 1; /* key does not exist in registry */ readlen = len;