From: Luca Barbato Date: Sat, 23 Jan 2010 16:41:52 +0000 (+0100) Subject: libvlc os-specific path discovery X-Git-Tag: 1.1.0-ff~1015 X-Git-Url: https://git.sesse.net/?a=commitdiff_plain;h=c035e8417b7d1ff3df7d95af3a7e34092912db96;p=vlc libvlc os-specific path discovery Get the right libvlc path in macosx and win32 to reside in the specific.c files. Signed-off-by: Jean-Baptiste Kempf --- diff --git a/src/misc/darwin_specific.c b/src/misc/darwin_specific.c index 0efdd6d759..1f74cafb3a 100644 --- a/src/misc/darwin_specific.c +++ b/src/misc/darwin_specific.c @@ -30,7 +30,8 @@ #include #include "../libvlc.h" #include /* *dir() */ - +#include +#include #include #include @@ -79,7 +80,14 @@ void system_Init( libvlc_int_t *p_this, int *pi_argc, const char *ppsz_argv[] ) p_char = NULL; } } - + if ( !p_char ) + { + /* We are not linked to the VLC.framework, let's use dladdr to figure + * libvlc path */ + Dl_info info; + if( dladdr(system_Init, &info) ) + p_char = strdup(dirname( info.dli_fname )); + } if( !p_char ) { char path[MAXPATHLEN+1]; diff --git a/src/win32/specific.c b/src/win32/specific.c index 66cf7813f8..bf131fbbbc 100644 --- a/src/win32/specific.c +++ b/src/win32/specific.c @@ -48,18 +48,23 @@ void system_Init( libvlc_int_t *p_this, int *pi_argc, const char *ppsz_argv[] ) { VLC_UNUSED( p_this ); VLC_UNUSED( pi_argc ); VLC_UNUSED( ppsz_argv ); WSADATA Data; + MEMORY_BASIC_INFORMATION mbi; /* Get our full path */ char psz_path[MAX_PATH]; char *psz_vlc; wchar_t psz_wpath[MAX_PATH]; - if( GetModuleFileName( NULL, psz_wpath, MAX_PATH ) ) + if( VirtualQuery(system_Init, &mbi, sizeof(mbi) ) ) { - WideCharToMultiByte( CP_UTF8, 0, psz_wpath, -1, - psz_path, MAX_PATH, NULL, NULL ); + HMODULE hMod = (HMODULE) mbi.AllocationBase; + if( GetModuleFileName( hMod, psz_wpath, MAX_PATH ) ) + { + WideCharToMultiByte( CP_UTF8, 0, psz_wpath, -1, + psz_path, MAX_PATH, NULL, NULL ); + } + else psz_path[0] = '\0'; } - else psz_path[0] = '\0'; if( (psz_vlc = strrchr( psz_path, '\\' )) ) *psz_vlc = '\0';