From c035e8417b7d1ff3df7d95af3a7e34092912db96 Mon Sep 17 00:00:00 2001 From: Luca Barbato Date: Sat, 23 Jan 2010 17:41:52 +0100 Subject: [PATCH] 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 --- src/misc/darwin_specific.c | 12 ++++++++++-- src/win32/specific.c | 13 +++++++++---- 2 files changed, 19 insertions(+), 6 deletions(-) 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'; -- 2.39.2