From cbf012c33722737c255d08c7f81a3ee5c6c19052 Mon Sep 17 00:00:00 2001 From: Andreas Schneider Date: Thu, 15 Oct 2009 14:53:11 +0200 Subject: Fixed ssh_get_home_dir and ssh dir to be more portable on UNIX systems. Thanks to Pino Toscano. --- libssh/misc.c | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-) (limited to 'libssh/misc.c') diff --git a/libssh/misc.c b/libssh/misc.c index 690de3a..bae780b 100644 --- a/libssh/misc.c +++ b/libssh/misc.c @@ -71,9 +71,16 @@ #ifdef _WIN32 char *ssh_get_user_home_dir(void) { - static char szPath[MAX_PATH] = {0}; + char tmp[MAX_PATH] = {0}; + char szPath = NULL; - if (SHGetSpecialFolderPathA(NULL, szPath, CSIDL_PROFILE, TRUE)) { + if (SHGetSpecialFolderPathA(NULL, tmp, CSIDL_PROFILE, TRUE)) { + szPath = malloc(strlen(szPath) + 1); + if (home == NULL) { + return NULL; + } + + strcpy(szPath, tmp); return szPath; } @@ -90,7 +97,7 @@ char *ssh_get_user_home_dir(void) { } #else /* _WIN32 */ char *ssh_get_user_home_dir(void) { - static char szPath[PATH_MAX] = {0}; + char *szPath = NULL; struct passwd *pwd = NULL; pwd = getpwuid(getuid()); @@ -98,7 +105,7 @@ char *ssh_get_user_home_dir(void) { return NULL; } - snprintf(szPath, PATH_MAX - 1, "%s", pwd->pw_dir); + szPath = strdup(pwd->pw_dir); return szPath; } -- cgit