]> git.sesse.net Git - vlc/blobdiff - src/config/dirs.c
Fix config_GetHomeDir by using CSIDL_PERSONAL instead of CSIDL_PROFILE
[vlc] / src / config / dirs.c
index de1a1c748f8b6b357ace82fdb51b0e31878cc326..2661eb41fc975f7b92a3f478dbfa15be22362744 100644 (file)
@@ -25,7 +25,7 @@
 # include "config.h"
 #endif
 
-#include <vlc/vlc.h>
+#include <vlc_common.h>
 
 #if defined( WIN32 )
 # define _WIN32_IE IE5
 #include <assert.h>
 #include <limits.h>
 
+#if defined( WIN32 )
+# define DIR_SHARE ""
+#else
+# define DIR_SHARE "share"
+#endif
+
 /**
  * config_GetDataDir: find directory where shared data is installed
  *
@@ -58,7 +64,7 @@ const char *config_GetDataDir( void )
 
     if( *path == '\0' )
     {
-        snprintf( path, sizeof( path ), "%s/share",
+        snprintf( path, sizeof( path ), "%s" DIR_SEP DIR_SHARE,
                   vlc_global()->psz_vlcpath );
         path[sizeof( path ) - 1] = '\0';
     }
@@ -80,7 +86,7 @@ const char *config_GetConfDir( void )
 
     if( *path == '\0' )
     {
-        snprintf( path, sizeof( path ), "%s/share", /* FIXME: Duh? */
+        snprintf( path, sizeof( path ), "%s"DIR_SEP DIR_SHARE, /* FIXME: Duh? */
                   vlc_global()->psz_vlcpath );
         path[sizeof( path ) - 1] = '\0';
     }
@@ -92,6 +98,7 @@ const char *config_GetConfDir( void )
 
 static const char *GetDir( bool b_appdata )
 {
+    /* FIXME: a full memory page here - quite a waste... */
     static char homedir[PATH_MAX] = "";
 
 #if defined (WIN32)
@@ -102,7 +109,7 @@ static const char *GetDir( bool b_appdata )
 # else
     /* Get the "Application Data" folder for the current user */
     if( S_OK == SHGetFolderPathW( NULL,
-              (b_appdata ? CSIDL_APPDATA : CSIDL_PROFILE) | CSIDL_FLAG_CREATE,
+              (b_appdata ? CSIDL_APPDATA : CSIDL_PERSONAL) | CSIDL_FLAG_CREATE,
                                   NULL, SHGFP_TYPE_CURRENT, wdir ) )
 # endif
     {
@@ -153,43 +160,40 @@ static const char *GetDir( bool b_appdata )
 /**
  * Get the user's home directory
  */
-char *config_GetHomeDir( void )
+const char *config_GetHomeDir( void )
 {
-    return strdup (GetDir( false ));
+    return GetDir (false);
 }
 
 static char *config_GetFooDir (const char *xdg_name, const char *xdg_default)
 {
     char *psz_dir;
 #if defined(WIN32) || defined(__APPLE__) || defined(SYS_BEOS)
-    char *psz_parent = strdup (GetDir (true));
+    const char *psz_parent = GetDir (true);
 
     if( asprintf( &psz_dir, "%s" DIR_SEP CONFIG_DIR, psz_parent ) == -1 )
         psz_dir = NULL;
 
-    free (psz_parent);
     (void)xdg_name; (void)xdg_default;
 #else
     char var[sizeof ("XDG__HOME") + strlen (xdg_name)];
-
     /* XDG Base Directory Specification - Version 0.6 */
     snprintf (var, sizeof (var), "XDG_%s_HOME", xdg_name);
-    char *psz_home = getenv( var );
-    psz_home = psz_home ? FromLocaleDup( psz_home ) : NULL;
+
+    const char *psz_home = getenv (var);
+    psz_home = psz_home ? FromLocale (psz_home) : NULL;
     if( psz_home )
     {
         if( asprintf( &psz_dir, "%s/vlc", psz_home ) == -1 )
             psz_dir = NULL;
-        goto out;
+        LocaleFree (psz_home);
+        return psz_dir;
     }
 
     /* Try HOME, then fallback to non-XDG dirs */
     psz_home = config_GetHomeDir();
     if( asprintf( &psz_dir, "%s/%s/vlc", psz_home, xdg_default ) == -1 )
         psz_dir = NULL;
-
-out:
-    free (psz_home);
 #endif
     return psz_dir;
 }