From 5c8349780e66ff4baaab082de1de3d85e5c244ae Mon Sep 17 00:00:00 2001 From: Gildas Bazin Date: Fri, 9 Sep 2005 22:10:57 +0000 Subject: [PATCH] * configure.ac, src/extras/libc.c, modules/misc/network/ipv4.c: fixed the WinCE build. --- configure.ac | 4 ++-- modules/misc/network/ipv4.c | 31 +++++++++++++++++++++++-------- src/extras/libc.c | 8 ++++++-- 3 files changed, 31 insertions(+), 12 deletions(-) diff --git a/configure.ac b/configure.ac index 71197e82cb..58690430c5 100644 --- a/configure.ac +++ b/configure.ac @@ -171,7 +171,6 @@ case "${target_os}" in VLC_ADD_LDFLAGS([vlc],[-lws2_32 -lnetapi32 -lwinmm -mwindows]) VLC_ADD_LDFLAGS([vcdx cddax],[-lwinmm]) VLC_ADD_LDFLAGS([ipv4 ipv6 access_http access_mms access_udp access_tcp access_ftp access_output_udp sap slp http stream_out_standard stream_out_rtp vod_rtsp telnet netsync],[-lws2_32]) - VLC_ADD_LDFLAGS([ipv4],[-liphlpapi]) fi if test "${SYS}" = "mingwce"; then # add ws2 for closesocket, select, recv @@ -179,7 +178,6 @@ case "${target_os}" in VLC_ADD_CPPFLAGS([vlc],[-Dmain(a,b)=maince(a,b)]) VLC_ADD_LDFLAGS([vlc],[-lws2 -e WinMainCRTStartup]) VLC_ADD_LDFLAGS([ipv4 ipv6 access_http access_mms access_udp access_tcp access_ftp access_output_udp sap http netsync],[-lws2]) - VLC_ADD_LDFLAGS([ipv4],[-liphlpapi]) fi ;; *nto*) @@ -241,8 +239,10 @@ XGETTEXT="${XGETTEXT} --keyword=_NS --keyword=_ANS" dnl dnl Iconv stuff dnl +if test "${SYS}" != "mingwce"; then AS_IF([test "$am_cv_func_iconv" != "yes"], [AC_MSG_ERROR([libiconv is needed for VLC to work properly])]) +fi VLC_ADD_CFLAGS([vlc],[${INCICONV}]) VLC_ADD_LDFLAGS([vlc],[${LIBICONV}]) diff --git a/modules/misc/network/ipv4.c b/modules/misc/network/ipv4.c index e0f7b57215..90d8370fbd 100644 --- a/modules/misc/network/ipv4.c +++ b/modules/misc/network/ipv4.c @@ -344,21 +344,36 @@ static int OpenUDP( vlc_object_t * p_this ) #if defined (WIN32) || defined (UNDER_CE) else { + DWORD WINAPI (*OurGetBestInterface)(IPAddr,PDWORD); + DWORD WINAPI (*OurGetIpAddrTable)(PMIB_IPADDRTABLE,PULONG,BOOL); + HINSTANCE hiphlpapi = LoadLibrary(_T("Iphlpapi.dll")); DWORD i_index; - if( GetBestInterface( sock.sin_addr.s_addr, - &i_index ) == NO_ERROR ) + + if( hiphlpapi ) + { + OurGetBestInterface = + (void *)GetProcAddress( hiphlpapi, + _T("GetBestInterface") ); + OurGetIpAddrTable = + (void *)GetProcAddress( hiphlpapi, + _T("GetIpAddrTable") ); + } + + if( hiphlpapi && OurGetBestInterface && OurGetIpAddrTable && + OurGetBestInterface( sock.sin_addr.s_addr, + &i_index ) == NO_ERROR ) { PMIB_IPADDRTABLE p_table; DWORD i = 0; msg_Dbg( p_this, "Winsock best interface is %lu", (unsigned long)i_index ); - GetIpAddrTable( NULL, &i, 0 ); + OurGetIpAddrTable( NULL, &i, 0 ); p_table = (PMIB_IPADDRTABLE)malloc( i ); if( p_table != NULL ) { - if( GetIpAddrTable( p_table, &i, 0 ) == NO_ERROR) + if( OurGetIpAddrTable( p_table, &i, 0 ) == NO_ERROR ) { for( i = 0; i < p_table->dwNumEntries; i-- ) { @@ -371,13 +386,13 @@ static int OpenUDP( vlc_object_t * p_this ) } } } - else - msg_Warn( p_this, "GetIpAddrTable failed" ); + else msg_Warn( p_this, "GetIpAddrTable failed" ); free( p_table ); } } - else - msg_Dbg( p_this, "GetBestInterface failed" ); + else msg_Dbg( p_this, "GetBestInterface failed" ); + + if( hiphlpapi ) FreeLibrary( hiphlpapi ); } #endif if( psz_if_addr != NULL ) free( psz_if_addr ); diff --git a/src/extras/libc.c b/src/extras/libc.c index d536475f71..ed1b551891 100644 --- a/src/extras/libc.c +++ b/src/extras/libc.c @@ -55,6 +55,10 @@ # include #endif +#ifdef UNDER_CE +# define strcoll strcmp +#endif + /***************************************************************************** * getenv: just in case, but it should never be called *****************************************************************************/ @@ -343,7 +347,7 @@ int64_t vlc_atoll( const char *nptr ) * vlc_*dir_wrapper: wrapper under Windows to return the list of drive letters * when called with an empty argument or just '\' *****************************************************************************/ -#if defined(WIN32) || defined(UNDER_CE) +#if defined(WIN32) && !defined(UNDER_CE) typedef struct vlc_DIR { DIR *p_real_dir; @@ -949,7 +953,7 @@ int __vlc_execve( vlc_object_t *p_object, int i_argc, char **ppsz_argv, } } -#elif defined( WIN32 ) +#elif defined( WIN32 ) && !defined( UNDER_CE ) SECURITY_ATTRIBUTES saAttr; PROCESS_INFORMATION piProcInfo; STARTUPINFO siStartInfo; -- 2.39.5