Try to get home directory with getpwuid(getuid()) if getenv("HOME") fails.
This commit is contained in:
parent
3f1b9a756f
commit
f97c34da93
|
@ -31,6 +31,42 @@
|
||||||
|
|
||||||
#include "transmission.h"
|
#include "transmission.h"
|
||||||
|
|
||||||
|
#if !defined( SYS_BEOS ) && !defined( __AMIGAOS4__ )
|
||||||
|
|
||||||
|
#include <pwd.h>
|
||||||
|
|
||||||
|
static char * tr_getHomeDirectory()
|
||||||
|
{
|
||||||
|
static char homeDirectory[MAX_PATH_LENGTH];
|
||||||
|
static int init = 0;
|
||||||
|
char * envHome;
|
||||||
|
struct passwd * pw;
|
||||||
|
|
||||||
|
if( init )
|
||||||
|
{
|
||||||
|
return homeDirectory;
|
||||||
|
}
|
||||||
|
|
||||||
|
envHome = getenv( "HOME" );
|
||||||
|
if( NULL == envHome )
|
||||||
|
{
|
||||||
|
pw = getpwuid( getuid() );
|
||||||
|
endpwent();
|
||||||
|
if( NULL == pw )
|
||||||
|
{
|
||||||
|
/* XXX need to handle this case */
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
envHome = pw->pw_dir;
|
||||||
|
}
|
||||||
|
|
||||||
|
snprintf( homeDirectory, MAX_PATH_LENGTH, "%s", envHome );
|
||||||
|
init = 1;
|
||||||
|
|
||||||
|
return homeDirectory;
|
||||||
|
}
|
||||||
|
#endif /* !SYS_BEOS && !__AMIGAOS4__ */
|
||||||
|
|
||||||
static void
|
static void
|
||||||
tr_migrateResume( const char *oldDirectory, const char *newDirectory )
|
tr_migrateResume( const char *oldDirectory, const char *newDirectory )
|
||||||
{
|
{
|
||||||
|
@ -74,12 +110,12 @@ char * tr_getPrefsDirectory()
|
||||||
strcat( prefsDirectory, "/Transmission" );
|
strcat( prefsDirectory, "/Transmission" );
|
||||||
#elif defined( SYS_DARWIN )
|
#elif defined( SYS_DARWIN )
|
||||||
snprintf( prefsDirectory, MAX_PATH_LENGTH,
|
snprintf( prefsDirectory, MAX_PATH_LENGTH,
|
||||||
"%s/Library/Caches/Transmission", getenv( "HOME" ) );
|
"%s/Library/Caches/Transmission", tr_getHomeDirectory() );
|
||||||
#elif defined(__AMIGAOS4__)
|
#elif defined(__AMIGAOS4__)
|
||||||
snprintf( prefsDirectory, MAX_PATH_LENGTH, "PROGDIR:.transmission" );
|
snprintf( prefsDirectory, MAX_PATH_LENGTH, "PROGDIR:.transmission" );
|
||||||
#else
|
#else
|
||||||
snprintf( prefsDirectory, MAX_PATH_LENGTH, "%s/.transmission",
|
snprintf( prefsDirectory, MAX_PATH_LENGTH, "%s/.transmission",
|
||||||
getenv( "HOME" ) );
|
tr_getHomeDirectory() );
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
tr_mkdir( prefsDirectory );
|
tr_mkdir( prefsDirectory );
|
||||||
|
@ -88,7 +124,7 @@ char * tr_getPrefsDirectory()
|
||||||
#ifdef SYS_DARWIN
|
#ifdef SYS_DARWIN
|
||||||
char oldDirectory[MAX_PATH_LENGTH];
|
char oldDirectory[MAX_PATH_LENGTH];
|
||||||
snprintf( oldDirectory, MAX_PATH_LENGTH, "%s/.transmission",
|
snprintf( oldDirectory, MAX_PATH_LENGTH, "%s/.transmission",
|
||||||
getenv( "HOME" ) );
|
tr_getHomeDirectory() );
|
||||||
tr_migrateResume( oldDirectory, prefsDirectory );
|
tr_migrateResume( oldDirectory, prefsDirectory );
|
||||||
rmdir( oldDirectory );
|
rmdir( oldDirectory );
|
||||||
#endif
|
#endif
|
||||||
|
@ -146,7 +182,7 @@ char * tr_getTorrentsDirectory()
|
||||||
#elif defined( SYS_DARWIN )
|
#elif defined( SYS_DARWIN )
|
||||||
snprintf( torrentsDirectory, MAX_PATH_LENGTH,
|
snprintf( torrentsDirectory, MAX_PATH_LENGTH,
|
||||||
"%s/Library/Application Support/Transmission/Torrents",
|
"%s/Library/Application Support/Transmission/Torrents",
|
||||||
getenv( "HOME" ) );
|
tr_getHomeDirectory() );
|
||||||
#else
|
#else
|
||||||
snprintf( torrentsDirectory, MAX_PATH_LENGTH, "%s/torrents",
|
snprintf( torrentsDirectory, MAX_PATH_LENGTH, "%s/torrents",
|
||||||
tr_getPrefsDirectory() );
|
tr_getPrefsDirectory() );
|
||||||
|
|
Loading…
Reference in New Issue