Changeset b152c831cf6bd6dab1fe8e29859ea85d9f384022
- Timestamp:
- 22/05/08 20:29:04
(5 months ago)
- Author:
- Rémi Denis-Courmont <rem@videolan.org>
- git-committer:
- Rémi Denis-Courmont <rem@videolan.org> 1211480944 +0300
- git-parent:
[eef284f3b6e266ffc7f82a2f447f74d5813afbc1]
- git-author:
- Rémi Denis-Courmont <rem@videolan.org> 1211476692 +0300
- Message:
Store the home directory statically, as it cannot change
-
Files:
-
Legend:
- Unmodified
- Added
- Removed
- Modified
- Copied
- Moved
| re104a2e |
rb152c83 |
|
| 91 | 91 | } |
|---|
| 92 | 92 | |
|---|
| 93 | | static char *GetDir( bool b_appdata ) |
|---|
| 94 | | { |
|---|
| 95 | | const char *psz_localhome = NULL; |
|---|
| 96 | | |
|---|
| 97 | | #if defined(WIN32) && !defined(UNDER_CE) |
|---|
| 98 | | wchar_t whomedir[MAX_PATH]; |
|---|
| | 93 | static const char *GetDir( bool b_appdata ) |
|---|
| | 94 | { |
|---|
| | 95 | static char homedir[PATH_MAX] = ""; |
|---|
| | 96 | |
|---|
| | 97 | #if defined (WIN32) |
|---|
| | 98 | wchar_t wdir[MAX_PATH]; |
|---|
| | 99 | |
|---|
| | 100 | # if defined (UNDER_CE) |
|---|
| | 101 | if( SHGetSpecialFolderPath( NULL, wdir, CSIDL_APPDATA, 1 ) ) |
|---|
| | 102 | # else |
|---|
| 99 | 103 | /* Get the "Application Data" folder for the current user */ |
|---|
| 100 | 104 | if( S_OK == SHGetFolderPathW( NULL, |
|---|
| 101 | 105 | (b_appdata ? CSIDL_APPDATA : CSIDL_PROFILE) | CSIDL_FLAG_CREATE, |
|---|
| 102 | | NULL, SHGFP_TYPE_CURRENT, whomedir ) ) |
|---|
| 103 | | return FromWide( whomedir ); |
|---|
| 104 | | |
|---|
| 105 | | #elif defined(UNDER_CE) |
|---|
| | 106 | NULL, SHGFP_TYPE_CURRENT, wdir ) ) |
|---|
| | 107 | # endif |
|---|
| | 108 | { |
|---|
| | 109 | static char appdir[PATH_MAX] = ""; |
|---|
| | 110 | WideCharToMultiByte (CP_UTF8, 0, wdir, -1, |
|---|
| | 111 | b_appdata ? appdir : homedir, PATH_MAX, |
|---|
| | 112 | NULL, NULL); |
|---|
| | 113 | return b_appdata ? appdir : homedir; |
|---|
| | 114 | } |
|---|
| | 115 | #else |
|---|
| 106 | 116 | (void)b_appdata; |
|---|
| 107 | | #ifndef CSIDL_APPDATA |
|---|
| 108 | | # define CSIDL_APPDATA 0x1A |
|---|
| 109 | | #endif |
|---|
| 110 | | |
|---|
| 111 | | wchar_t whomedir[MAX_PATH]; |
|---|
| 112 | | |
|---|
| 113 | | /* get the "Application Data" folder for the current user */ |
|---|
| 114 | | if( SHGetSpecialFolderPath( NULL, whomedir, CSIDL_APPDATA, 1 ) ) |
|---|
| 115 | | return FromWide( whomedir ); |
|---|
| 116 | | #else |
|---|
| 117 | | (void)b_appdata; |
|---|
| 118 | | #endif |
|---|
| 119 | | |
|---|
| 120 | | psz_localhome = getenv( "HOME" ); |
|---|
| | 117 | #endif |
|---|
| | 118 | |
|---|
| | 119 | #ifdef LIBVLC_USE_PTHREAD |
|---|
| | 120 | static pthread_mutex_t lock = PTHREAD_MUTEX_INITIALIZER; |
|---|
| | 121 | pthread_mutex_lock (&lock); |
|---|
| | 122 | #endif |
|---|
| | 123 | |
|---|
| | 124 | if (!*homedir) |
|---|
| | 125 | { |
|---|
| | 126 | const char *psz_localhome = getenv( "HOME" ); |
|---|
| 121 | 127 | #if defined(HAVE_GETPWUID_R) |
|---|
| 122 | | char buf[sysconf (_SC_GETPW_R_SIZE_MAX)]; |
|---|
| 123 | | if( psz_localhome == NULL ) |
|---|
| 124 | | { |
|---|
| 125 | | struct passwd pw, *res; |
|---|
| 126 | | |
|---|
| 127 | | if (!getpwuid_r (getuid (), &pw, buf, sizeof (buf), &res) && res) |
|---|
| 128 | | psz_localhome = pw.pw_dir; |
|---|
| 129 | | } |
|---|
| 130 | | #endif |
|---|
| 131 | | if (psz_localhome == NULL) |
|---|
| 132 | | psz_localhome = getenv( "TMP" ); |
|---|
| 133 | | if (psz_localhome == NULL) |
|---|
| 134 | | psz_localhome = "/tmp"; |
|---|
| 135 | | |
|---|
| 136 | | return FromLocaleDup( psz_localhome ); |
|---|
| | 128 | char buf[sysconf (_SC_GETPW_R_SIZE_MAX)]; |
|---|
| | 129 | if (psz_localhome == NULL) |
|---|
| | 130 | { |
|---|
| | 131 | struct passwd pw, *res; |
|---|
| | 132 | |
|---|
| | 133 | if (!getpwuid_r (getuid (), &pw, buf, sizeof (buf), &res) && res) |
|---|
| | 134 | psz_localhome = pw.pw_dir; |
|---|
| | 135 | } |
|---|
| | 136 | #endif |
|---|
| | 137 | if (psz_localhome == NULL) |
|---|
| | 138 | psz_localhome = getenv( "TMP" ); |
|---|
| | 139 | if (psz_localhome == NULL) |
|---|
| | 140 | psz_localhome = "/tmp"; |
|---|
| | 141 | |
|---|
| | 142 | const char *uhomedir = FromLocale (psz_localhome); |
|---|
| | 143 | strncpy (homedir, uhomedir, sizeof (homedir) - 1); |
|---|
| | 144 | homedir[sizeof (homedir) - 1] = '\0'; |
|---|
| | 145 | LocaleFree (uhomedir); |
|---|
| | 146 | } |
|---|
| | 147 | #ifdef LIBVLC_USE_PTHREAD |
|---|
| | 148 | pthread_mutex_unlock (&lock); |
|---|
| | 149 | #endif |
|---|
| | 150 | return homedir; |
|---|
| 137 | 151 | } |
|---|
| 138 | 152 | |
|---|
| … | … | |
| 142 | 156 | char *config_GetHomeDir( void ) |
|---|
| 143 | 157 | { |
|---|
| 144 | | return GetDir( false ); |
|---|
| | 158 | return strdup (GetDir( false )); |
|---|
| 145 | 159 | } |
|---|
| 146 | 160 | |
|---|
| … | … | |
| 149 | 163 | char *psz_dir; |
|---|
| 150 | 164 | #if defined(WIN32) || defined(__APPLE__) || defined(SYS_BEOS) |
|---|
| 151 | | char *psz_parent = GetDir (true); |
|---|
| | 165 | char *psz_parent = strdup (GetDir (true)); |
|---|
| 152 | 166 | |
|---|
| 153 | 167 | if( asprintf( &psz_dir, "%s" DIR_SEP CONFIG_DIR, psz_parent ) == -1 ) |
|---|