From: Felix Paul Kühne Date: Fri, 6 Nov 2009 23:23:40 +0000 (+0100) Subject: macos dirs: simplified, implemented completely and fixed warnings X-Git-Tag: 1.1.0-ff~2569 X-Git-Url: https://git.sesse.net/?a=commitdiff_plain;h=8828e4f3b34e3af1d8de612b31e63379164a19c7;p=vlc macos dirs: simplified, implemented completely and fixed warnings --- diff --git a/src/config/dirs_macos.c b/src/config/dirs_macos.c index 0d4a63844b..187948e1a2 100644 --- a/src/config/dirs_macos.c +++ b/src/config/dirs_macos.c @@ -1,10 +1,11 @@ /***************************************************************************** - * dirs_macos.c: MacOS directories configuration + * dirs_macos.c: Mac OS X directories configuration ***************************************************************************** - * Copyright (C) 2001-2007 the VideoLAN team + * Copyright (C) 2001-2009 the VideoLAN team * Copyright © 2007-2009 Rémi Denis-Courmont * * Authors: Gildas Bazin + * Felix Paul Kühne * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -31,129 +32,77 @@ #include #include -#include -#include -#include -#include -const char *config_GetDataDir( void ) +const char *config_GetConfDir( void ) { - static char path[PATH_MAX] = ""; - -#warning FIXME: thread-safety! - if( *path == '\0' ) - { - snprintf( path, sizeof( path ), "%s" DIR_SEP "share", psz_vlcpath ); - path[sizeof( path ) - 1] = '\0'; - } - return path; + return config_GetUserDir (VLC_CONFIG_DIR); } -static const char *GetDir(void) +const char *config_GetDataDir (void) { - /* FIXME: a full memory page here - quite a waste... */ - static char homedir[PATH_MAX] = ""; - - static pthread_mutex_t lock = PTHREAD_MUTEX_INITIALIZER; - pthread_mutex_lock (&lock); - - if (!*homedir) - { - const char *psz_localhome = getenv( "HOME" ); -#if defined(HAVE_GETPWUID_R) - char buf[sysconf (_SC_GETPW_R_SIZE_MAX)]; - if (psz_localhome == NULL) - { - struct passwd pw, *res; - - if (!getpwuid_r (getuid (), &pw, buf, sizeof (buf), &res) && res) - psz_localhome = pw.pw_dir; - } -#endif - if (psz_localhome == NULL) - psz_localhome = getenv( "TMP" ); - if (psz_localhome == NULL) - psz_localhome = "/tmp"; - - const char *uhomedir = FromLocale (psz_localhome); - strncpy (homedir, uhomedir, sizeof (homedir) - 1); - homedir[sizeof (homedir) - 1] = '\0'; - LocaleFree (uhomedir); - } - pthread_mutex_unlock (&lock); - return homedir; -} - -const char *config_GetConfDir( void ) -{ - static char path[PATH_MAX] = ""; - -#warning FIXME: system config is not the same as shared app data... - if( *path == '\0' ) - { - snprintf( path, sizeof( path ), "%s" DIR_SEP "share", /* FIXME: Duh? */ - psz_vlcpath ); - path[sizeof( path ) - 1] = '\0'; - } - return path; + return config_GetUserDir (VLC_DATA_DIR); } static char *config_GetHomeDir (void) { /* 1/ Try $HOME */ const char *home = getenv ("HOME"); -#if defined(HAVE_GETPWUID_R) - /* 2/ Try /etc/passwd */ - char buf[sysconf (_SC_GETPW_R_SIZE_MAX)]; - if (home == NULL) - { - struct passwd pw, *res; - if (!getpwuid_r (getuid (), &pw, buf, sizeof (buf), &res) && res) - home = pw.pw_dir; - } -#endif - /* 3/ Desperately try $TMP */ - if (home == NULL) - home = getenv( "TMP" ); - /* 4/ Beyond hope, hard-code /tmp */ if (home == NULL) home = "/tmp"; return FromLocaleDup (home); } - +/* static char *config_GetAppDir (void) { - char *psz_dir; - const char *psz_parent = GetDir (); - - if( asprintf( &psz_dir, "%s/Library/Preferences/VLC", psz_parent ) == -1 ) - psz_dir = NULL; - return psz_dir; -} + return config_GetUserDir (VLC_CONFIG_DIR); +} */ char *config_GetUserDir (vlc_userdir_t type) { + char *psz_dir; + const char *psz_parent = config_GetHomeDir (); + const char *psz_path; + switch (type) { - case VLC_HOME_DIR: - return config_GetHomeDir (); case VLC_CONFIG_DIR: + psz_path = "%s/Library/Preferences/VLC"; + break; + case VLC_TEMPLATES_DIR: case VLC_DATA_DIR: - case VLC_CACHE_DIR: - return config_GetAppDir (); - + psz_path = "%s/Library/Application Support/VLC"; + break; case VLC_DESKTOP_DIR: + psz_path = "%s/Desktop"; + break; case VLC_DOWNLOAD_DIR: - case VLC_TEMPLATES_DIR: - case VLC_PUBLICSHARE_DIR: + psz_path = "%s/Downloads"; + break; case VLC_DOCUMENTS_DIR: + psz_path = "%s/Documents"; + break; case VLC_MUSIC_DIR: + psz_path = "%s/Music"; + break; case VLC_PICTURES_DIR: + psz_path = "%s/Pictures"; + break; case VLC_VIDEOS_DIR: -#warning FIXME not implemented - return config_GetUserDir (VLC_HOME_DIR);; + psz_path = "%s/Movies"; + break; + case VLC_PUBLICSHARE_DIR: + psz_path = "%s/Public"; + break; + case VLC_CACHE_DIR: + psz_path = "%s/Library/Caches/org.videolan.vlc"; + break; + case VLC_HOME_DIR: + default: + psz_path = "%s"; } - assert (0); + if( asprintf( &psz_dir, psz_path, psz_parent ) == -1 ) + psz_dir = NULL; + return psz_dir; }