Commit 09b452a3 authored by Rémi Denis-Courmont's avatar Rémi Denis-Courmont

XDG code factorization

parent 60987ce2
...@@ -724,63 +724,58 @@ char *config_GetUserDir( void ) ...@@ -724,63 +724,58 @@ char *config_GetUserDir( void )
return GetDir( true ); return GetDir( true );
} }
/** static char *config_GetFooDir (libvlc_int_t *p_libvlc, const char *xdg_name,
* Get the user's VLC configuration directory const char *xdg_default)
*/
char *config_GetConfigDir( libvlc_int_t *p_libvlc )
{ {
char *psz_dir; char *psz_dir;
#if defined(WIN32) || defined(__APPLE__) || defined(SYS_BEOS) #if defined(WIN32) || defined(__APPLE__) || defined(SYS_BEOS)
char *psz_parent = config_GetUserDir(); 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 ) 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; return psz_dir;
#else #else
char var[sizeof ("XDG__HOME") + strlen (xdg_name)], *psz_env;
/* XDG Base Directory Specification - Version 0.6 */ /* 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( psz_env )
{ {
if( asprintf( &psz_dir, "%s/vlc", psz_env ) == -1 ) if( asprintf( &psz_dir, "%s/vlc", psz_env ) == -1 )
return NULL; return NULL;
return psz_dir; return psz_dir;
} }
psz_env = getenv( "HOME" ); psz_env = getenv( "HOME" );
if( !psz_env ) psz_env = p_libvlc->psz_homedir; /* not part of XDG spec but we want a sensible fallback */ /* not part of XDG spec but we want a sensible fallback */
if( asprintf( &psz_dir, "%s/.config/vlc", psz_env ) == -1 ) if( !psz_env )
psz_env = p_libvlc->psz_homedir;
if( asprintf( &psz_dir, "%s/%s/vlc", psz_env, xdg_default ) == -1 )
return NULL; return NULL;
return psz_dir; return psz_dir;
#endif #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 * Get the user's VLC data directory
* (used for stuff like the skins, custom lua modules, ...) * (used for stuff like the skins, custom lua modules, ...)
*/ */
char *config_GetUserDataDir( libvlc_int_t *p_libvlc ) char *config_GetUserDataDir( libvlc_int_t *p_libvlc )
{ {
char *psz_dir; return config_GetFooDir (p_libvlc, "DATA", ".local/share");
#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
} }
/** /**
...@@ -789,26 +784,5 @@ char *config_GetUserDataDir( libvlc_int_t *p_libvlc ) ...@@ -789,26 +784,5 @@ char *config_GetUserDataDir( libvlc_int_t *p_libvlc )
*/ */
char *config_GetCacheDir( libvlc_int_t *p_libvlc ) char *config_GetCacheDir( libvlc_int_t *p_libvlc )
{ {
char *psz_dir; return config_GetFooDir (p_libvlc, "CACHE", ".cache");
#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
} }
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment