X-Git-Url: http://git.osdn.jp/view?a=blobdiff_plain;f=libhb%2Fports.c;h=120038618bbd2197c43723285554e8085cde2445;hb=47efd7ba710d51cac8eb6f2b04ae468fea07d27d;hp=2c3884436e596b368726c4030b4281beedae9d55;hpb=4980ef9d0ec9b1b984eb075d7880ba04317363d0;p=handbrake-jp%2Fhandbrake-jp-git.git diff --git a/libhb/ports.c b/libhb/ports.c index 2c388443..12003861 100644 --- a/libhb/ports.c +++ b/libhb/ports.c @@ -31,6 +31,11 @@ #include #endif +#ifdef SYS_MINGW +#include +#include +#endif + #ifdef SYS_SunOS #include #endif @@ -39,15 +44,27 @@ #include -//#ifdef SYS_CYGWIN -//#include -//#include -//#else +#ifdef SYS_MINGW +#include +#include +#else #include #include #include #include -//#endif +#endif + +#if defined( SYS_LINUX ) +#include +#include +#include +#elif defined( SYS_OPENBSD ) +#include +#include +#include +#endif + +#include #include "hb.h" @@ -75,6 +92,40 @@ int gettimeofday( struct timeval * tv, struct timezone * tz ) #endif */ +int hb_dvd_region(char *device, int *region_mask) +{ +#if defined( DVD_LU_SEND_RPC_STATE ) && defined( DVD_AUTH ) + struct stat st; + dvd_authinfo ai; + int fd, ret; + + fd = open( device, O_RDONLY ); + if ( fd < 0 ) + return -1; + if ( fstat( fd, &st ) < 0 ) + { + close( fd ); + return -1; + } + if ( !( S_ISBLK( st.st_mode ) || S_ISCHR( st.st_mode ) ) ) + { + close( fd ); + return -1; + } + + ai.type = DVD_LU_SEND_RPC_STATE; + ret = ioctl(fd, DVD_AUTH, &ai); + close( fd ); + if ( ret < 0 ) + return ret; + + *region_mask = ai.lrpcs.region_mask; + return 0; +#else + return -1; +#endif +} + uint64_t hb_get_date() { struct timeval tv; @@ -97,7 +148,7 @@ void hb_snooze( int delay ) snooze( 1000 * delay ); #elif defined( SYS_DARWIN ) || defined( SYS_LINUX ) || defined( SYS_FREEBSD) || defined( SYS_SunOS ) usleep( 1000 * delay ); -#elif defined( SYS_CYGWIN ) +#elif defined( SYS_CYGWIN ) || defined( SYS_MINGW ) Sleep( delay ); #endif } @@ -119,7 +170,7 @@ int hb_get_cpu_count() } cpu_count = 1; -#if defined(SYS_CYGWIN) +#if defined(SYS_CYGWIN) || defined(SYS_MINGW) SYSTEM_INFO cpuinfo; GetSystemInfo( &cpuinfo ); cpu_count = cpuinfo.dwNumberOfProcessors; @@ -138,7 +189,7 @@ int hb_get_cpu_count() cpu_count = info.cpu_count; #elif defined(SYS_DARWIN) || defined(SYS_FREEBSD) || defined(SYS_OPENBSD) - size_t length = sizeof( numberOfCPUs ); + size_t length = sizeof( cpu_count ); #ifdef SYS_OPENBSD int mib[2] = { CTL_HW, HW_NCPU }; if( sysctl(mib, 2, &cpu_count, &length, NULL, 0) ) @@ -181,7 +232,7 @@ void hb_get_tempory_directory( hb_handle_t * h, char path[512] ) char base[512]; /* Create the base */ -#ifdef SYS_CYGWIN +#if defined( SYS_CYGWIN ) || defined( SYS_MINGW ) char *p; int i_size = GetTempPath( 512, base ); if( i_size <= 0 || i_size >= 512 ) @@ -227,11 +278,11 @@ void hb_get_tempory_filename( hb_handle_t * h, char name[1024], ***********************************************************************/ void hb_mkdir( char * name ) { -//#ifdef SYS_CYGWIN -// mkdir( name ); -//#else +#ifdef SYS_MINGW + mkdir( name ); +#else mkdir( name, 0755 ); -//#endif +#endif } /************************************************************************ @@ -256,6 +307,27 @@ struct hb_thread_s #endif }; +/* Get a unique identifier to thread and represent as 64-bit unsigned. + * If unsupported, the value 0 is be returned. + * Caller should use result only for display/log purposes. + */ +static uint64_t hb_thread_to_integer( const hb_thread_t* t ) +{ +#if defined( USE_PTHREAD ) + #if defined( SYS_CYGWIN ) + return (uint64_t)t->thread; + #elif defined( _WIN32 ) || defined( __MINGW32__ ) + return (uint64_t)(ptrdiff_t)t->thread.p; + #elif defined( SYS_DARWIN ) + return (unsigned long)t->thread; + #else + return (uint64_t)t->thread; + #endif +#else + return 0; +#endif +} + /************************************************************************ * hb_thread_func() ************************************************************************ @@ -286,7 +358,7 @@ static void hb_thread_func( void * _t ) t->function( t->arg ); /* Inform that the thread can be joined now */ - hb_deep_log( 2, "thread %x exited (\"%s\")", t->thread, t->name ); + hb_deep_log( 2, "thread %"PRIx64" exited (\"%s\")", hb_thread_to_integer( t ), t->name ); hb_lock( t->lock ); t->exited = 1; hb_unlock( t->lock ); @@ -331,7 +403,7 @@ hb_thread_t * hb_thread_init( char * name, void (* function)(void *), // SetThreadPriority( GetCurrentThread(), THREAD_PRIORITY_BELOW_NORMAL ); #endif - hb_deep_log( 2, "thread %x started (\"%s\")", t->thread, t->name ); + hb_deep_log( 2, "thread %"PRIx64" started (\"%s\")", hb_thread_to_integer( t ), t->name ); return t; } @@ -356,8 +428,7 @@ void hb_thread_close( hb_thread_t ** _t ) // WaitForSingleObject( t->thread, INFINITE ); #endif - hb_deep_log( 2, "thread %x joined (\"%s\")", - t->thread, t->name ); + hb_deep_log( 2, "thread %"PRIx64" joined (\"%s\")", hb_thread_to_integer( t ), t->name ); hb_lock_close( &t->lock ); free( t->name ); @@ -573,6 +644,23 @@ hb_net_t * hb_net_open( char * address, int port ) struct sockaddr_in sock; struct hostent * host; +#ifdef SYS_MINGW + WSADATA wsaData; + int iResult, winsock_init = 0; + + // Initialize Winsock + if (!winsock_init) + { + iResult = WSAStartup(MAKEWORD(2, 2), &wsaData); + if (iResult != 0) + { + hb_log("WSAStartup failed: %d", iResult); + return NULL; + } + winsock_init = 1; + } +#endif + /* TODO: find out why this doesn't work on Win32 */ if( !( host = gethostbyname( address ) ) ) {