]> git.sesse.net Git - vlc/commitdiff
XDG code factorization
authorRémi Denis-Courmont <rem@videolan.org>
Sun, 4 May 2008 19:00:51 +0000 (22:00 +0300)
committerRémi Denis-Courmont <rem@videolan.org>
Sun, 4 May 2008 19:00:51 +0000 (22:00 +0300)
src/config/core.c

index eb4ef23b41b23ac0d952c63be147f31285945ac1..c7a26c50130c9a3b32afb065abd46f4a1f967e18 100644 (file)
@@ -724,63 +724,58 @@ char *config_GetUserDir( void )
     return GetDir( true );
 }
 
-/**
- * Get the user's VLC configuration directory
- */
-char *config_GetConfigDir( libvlc_int_t *p_libvlc )
+static char *config_GetFooDir (libvlc_int_t *p_libvlc, const char *xdg_name,
+                               const char *xdg_default)
 {
     char *psz_dir;
 #if defined(WIN32) || defined(__APPLE__) || defined(SYS_BEOS)
     char *psz_parent = config_GetUserDir();
-    if( !psz_parent ) psz_parent = p_libvlc->psz_homedir;
+
+    if( !psz_parent )
+        psz_parent = p_libvlc->psz_homedir;
     if( asprintf( &psz_dir, "%s" DIR_SEP CONFIG_DIR, psz_parent ) == -1 )
-        return NULL;
+        psz_dir = NULL;
+
+    (void)xdg_name; (void)xdg_default;
     return psz_dir;
 #else
+    char var[sizeof ("XDG__HOME") + strlen (xdg_name)], *psz_env;
+
     /* XDG Base Directory Specification - Version 0.6 */
-    char *psz_env = getenv( "XDG_CONFIG_HOME" );
+    snprintf (var, sizeof (var), "XDG_%s_HOME", xdg_name);
+    psz_env = getenv (var);
     if( psz_env )
     {
         if( asprintf( &psz_dir, "%s/vlc", psz_env ) == -1 )
             return NULL;
         return psz_dir;
     }
+
     psz_env = getenv( "HOME" );
-    if( !psz_env ) psz_env = p_libvlc->psz_homedir; /* not part of XDG spec but we want a sensible fallback */
-    if( asprintf( &psz_dir, "%s/.config/vlc", psz_env ) == -1 )
+    /* not part of XDG spec but we want a sensible fallback */
+    if( !psz_env )
+        psz_env = p_libvlc->psz_homedir;
+    if( asprintf( &psz_dir, "%s/%s/vlc", psz_env, xdg_default ) == -1 )
         return NULL;
     return psz_dir;
 #endif
 }
 
+/**
+ * Get the user's VLC configuration directory
+ */
+char *config_GetConfigDir( libvlc_int_t *p_libvlc )
+{
+    return config_GetFooDir (p_libvlc, "CONFIG", ".config");
+}
+
 /**
  * Get the user's VLC data directory
  * (used for stuff like the skins, custom lua modules, ...)
  */
 char *config_GetUserDataDir( libvlc_int_t *p_libvlc )
 {
-    char *psz_dir;
-#if defined(WIN32) || defined(__APPLE__) || defined(SYS_BEOS)
-    char *psz_parent = config_GetUserDir();
-    if( !psz_parent ) psz_parent = p_libvlc->psz_homedir;
-    if( asprintf( &psz_dir, "%s" DIR_SEP CONFIG_DIR, psz_parent ) == -1 )
-        return NULL;
-    return psz_dir;
-#else
-    /* XDG Base Directory Specification - Version 0.6 */
-    char *psz_env = getenv( "XDG_DATA_HOME" );
-    if( psz_env )
-    {
-        if( asprintf( &psz_dir, "%s/vlc", psz_env ) == -1 )
-            return NULL;
-        return psz_dir;
-    }
-    psz_env = getenv( "HOME" );
-    if( !psz_env ) psz_env = p_libvlc->psz_homedir; /* not part of XDG spec but we want a sensible fallback */
-    if( asprintf( &psz_dir, "%s/.local/share/vlc", psz_env ) == -1 )
-        return NULL;
-    return psz_dir;
-#endif
+    return config_GetFooDir (p_libvlc, "DATA", ".local/share");
 }
 
 /**
@@ -789,26 +784,5 @@ char *config_GetUserDataDir( libvlc_int_t *p_libvlc )
  */
 char *config_GetCacheDir( libvlc_int_t *p_libvlc )
 {
-    char *psz_dir;
-#if defined(WIN32) || defined(__APPLE__) || defined(SYS_BEOS)
-    char *psz_parent = config_GetUserDir();
-    if( !psz_parent ) psz_parent = p_libvlc->psz_homedir;
-    if( asprintf( &psz_dir, "%s" DIR_SEP CONFIG_DIR, psz_parent ) == -1 )
-        return NULL;
-    return psz_dir;
-#else
-    /* XDG Base Directory Specification - Version 0.6 */
-    char *psz_env = getenv( "XDG_CACHE_HOME" );
-    if( psz_env )
-    {
-        if( asprintf( &psz_dir, "%s/vlc", psz_env ) == -1 )
-            return NULL;
-        return psz_dir;
-    }
-    psz_env = getenv( "HOME" );
-    if( !psz_env ) psz_env = p_libvlc->psz_homedir; /* not part of XDG spec but we want a sensible fallback */
-    if( asprintf( &psz_dir, "%s/.cache/vlc", psz_env ) == -1 )
-        return NULL;
-    return psz_dir;
-#endif
+    return config_GetFooDir (p_libvlc, "CACHE", ".cache");
 }