]> git.sesse.net Git - vlc/blobdiff - src/config/dirs_macos.c
Merge branch 'master' of git://git.videolan.org/vlc
[vlc] / src / config / dirs_macos.c
index fc91de2e1cf3d159696e30b959d770b7059aace2..0a563d84a1ee0e270b0d8b4771dc2b541caa504c 100644 (file)
 #include "configuration.h"
 
 static char *configdir = NULL;
-static char *datadir = NULL;
 
 static pthread_once_t once = PTHREAD_ONCE_INIT;
 
 static void init_dirs( void )
 {
     configdir = config_GetUserDir(VLC_CONFIG_DIR);
-    int ret = asprintf(&datadir, "%s/share", psz_vlcpath);
-    if (ret == -1)
-        datadir = NULL;
 }
 
 const char *config_GetConfDir( void )
@@ -54,12 +50,20 @@ const char *config_GetConfDir( void )
     return configdir;
 }
 
-const char *config_GetDataDirDefault (void)
+char *config_GetDataDirDefault (void)
 {
-    pthread_once(&once, init_dirs);
+    char *datadir;
+
+    if (asprintf (&datadir, "%s/share", psz_vlcpath) == -1)
+        return NULL;
     return datadir;
 }
 
+const char *config_GetLibDir (void)
+{
+    abort ();
+}
+
 static char *config_GetHomeDir (void)
 {
     const char *home = getenv ("HOME");
@@ -90,13 +94,25 @@ static char *getAppDependentDir(vlc_userdir_t type)
             break;
     }
 
+    // Default fallback
+    const char *name = "org.videolan.vlc";
+
     CFBundleRef mainBundle = CFBundleGetMainBundle();
-    CFStringRef identifierAsNS = CFBundleGetIdentifier(mainBundle);
-    const char *identifier = CFStringGetCStringPtr(identifierAsNS, kCFStringEncodingUTF8);
-    
+    if (mainBundle)
+    {
+        CFStringRef identifierAsNS = CFBundleGetIdentifier(mainBundle);
+        if (identifierAsNS)
+        {
+            char identifier[256];
+            Boolean ret = CFStringGetCString(identifierAsNS, identifier, sizeof(identifier), kCFStringEncodingUTF8);
+            if (ret)
+                name = identifier;            
+        }
+    }
+
     char *psz_parent = config_GetHomeDir ();
     char *psz_dir;
-    if( asprintf( &psz_dir, psz_path, psz_parent, identifier) == -1 )
+    if( asprintf( &psz_dir, psz_path, psz_parent, name) == -1 )
         psz_dir = NULL;
     free(psz_parent);