diff options
author | Andreas Schneider <mail@cynapses.org> | 2009-10-15 14:53:11 +0200 |
---|---|---|
committer | Andreas Schneider <mail@cynapses.org> | 2009-10-15 14:53:11 +0200 |
commit | cbf012c33722737c255d08c7f81a3ee5c6c19052 (patch) | |
tree | ff94b8a3aaa3c239dcfe85715b4eba5034a5b9d6 /libssh/misc.c | |
parent | c360ed1d9ad4ee0a65dd80494605c55802c30ba3 (diff) | |
download | libssh-cbf012c33722737c255d08c7f81a3ee5c6c19052.tar.gz libssh-cbf012c33722737c255d08c7f81a3ee5c6c19052.tar.xz libssh-cbf012c33722737c255d08c7f81a3ee5c6c19052.zip |
Fixed ssh_get_home_dir and ssh dir to be more portable on UNIX systems.
Thanks to Pino Toscano.
Diffstat (limited to 'libssh/misc.c')
-rw-r--r-- | libssh/misc.c | 15 |
1 files changed, 11 insertions, 4 deletions
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; } |