char *config_GetDataDir (void) { const char *path = getenv ("VLC_DATA_PATH"); if (path != NULL) return strdup (path); char *libdir = config_GetLibDir (); if (libdir == NULL) return NULL; /* OOM */ char *datadir = NULL; /* There are no clean ways to do this, are there? * Due to multilibs, we cannot simply append ../share/. */ char *p = strstr (libdir, "/lib/"); if (p != NULL) { char *p2; /* Deal with nested "lib" directories. Grmbl. */ while ((p2 = strstr (p + 4, "/lib/")) != NULL) p = p2; *p = '\0'; if (unlikely(asprintf (&datadir, "%s/share/"PACKAGE, libdir) == -1)) datadir = NULL; } free (libdir); return (datadir != NULL) ? datadir : strdup (PKGDATADIR); }
int vlclua_dir_list( vlc_object_t *p_this, const char *luadirname, char ***pppsz_dir_list ) { #define MAX_DIR_LIST_SIZE 5 *pppsz_dir_list = malloc(MAX_DIR_LIST_SIZE*sizeof(char *)); if (!*pppsz_dir_list) return VLC_EGENERIC; char **ppsz_dir_list = *pppsz_dir_list; int i = 0; char *datadir = config_GetUserDir( VLC_DATA_DIR ); if( likely(datadir != NULL) && likely(asprintf( &ppsz_dir_list[i], "%s"DIR_SEP"lua"DIR_SEP"%s", datadir, luadirname ) != -1) ) i++; free( datadir ); #if !(defined(__APPLE__) || defined(WIN32) || defined(__OS2__)) char *psz_libpath = config_GetLibDir(); if( likely(psz_libpath != NULL) ) { if( likely(asprintf( &ppsz_dir_list[i], "%s"DIR_SEP"lua"DIR_SEP"%s", psz_libpath, luadirname ) != -1) ) i++; free( psz_libpath ); } #endif char *psz_datapath = config_GetDataDir(); if( likely(psz_datapath != NULL) ) { if( likely(asprintf( &ppsz_dir_list[i], "%s"DIR_SEP"lua"DIR_SEP"%s", psz_datapath, luadirname ) != -1) ) i++; #if defined(__APPLE__) if( likely(asprintf( &ppsz_dir_list[i], "%s"DIR_SEP"share"DIR_SEP"lua"DIR_SEP"%s", psz_datapath, luadirname ) != -1) ) i++; #endif free( psz_datapath ); } ppsz_dir_list[i] = NULL; assert( i < MAX_DIR_LIST_SIZE); return VLC_SUCCESS; }
char *config_GetDataDir (void) { const char *path = getenv ("VLC_DATA_PATH"); if (path) return strdup (path); char *vlcpath = config_GetLibDir (); char *datadir; if (asprintf (&datadir, "%s/share", vlcpath) == -1) datadir = NULL; free (vlcpath); return datadir; }
char *config_GetDataDir (void) { const char *path = getenv ("VLC_DATA_PATH"); return (path != NULL) ? strdup (path) : config_GetLibDir (); }