X-Git-Url: http://git.osdn.jp/view?a=blobdiff_plain;f=libhb%2Fports.c;h=2e6b65329a9de6dde936a98c01b81bcc5a1c7114;hb=c593146bf3fab6290c71cbbb974e0a756e43f5e0;hp=3f02595cdc82f01c03a33b8e8696493b46bd5eba;hpb=90fba27222b3467b91c29803f217c4d5335c7ad0;p=handbrake-jp%2Fhandbrake-jp-git.git diff --git a/libhb/ports.c b/libhb/ports.c index 3f02595c..2e6b6532 100644 --- a/libhb/ports.c +++ b/libhb/ports.c @@ -1,34 +1,58 @@ /* $Id: ports.c,v 1.15 2005/10/15 18:05:03 titer Exp $ This file is part of the HandBrake source code. - Homepage: . + Homepage: . It may be used under the terms of the GNU General Public License. */ -#include -#include +#ifdef USE_PTHREAD +#ifdef SYS_LINUX +#define _GNU_SOURCE +#include +#endif +#include +#endif -#if defined( SYS_BEOS ) -#include -#include -#elif defined( SYS_CYGWIN ) +#ifdef SYS_BEOS +#include +#endif + +#if defined(SYS_DARWIN) || defined(SYS_FREEBSD) +#include +#include +#endif + +#ifdef SYS_OPENBSD +#include +#include +#include +#endif + +#ifdef SYS_CYGWIN #include -#elif defined( SYS_SunOS ) -#include #endif -#if USE_PTHREAD +#ifdef SYS_MINGW #include +#include #endif -//#ifdef SYS_CYGWIN -//#include -//#include -//#else +#ifdef SYS_SunOS +#include +#endif + +#include +#include + + +#ifdef SYS_MINGW +#include +#include +#else #include #include #include #include -//#endif +#endif #include "hb.h" @@ -78,7 +102,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 } @@ -100,54 +124,36 @@ int hb_get_cpu_count() } cpu_count = 1; -#if defined( SYS_BEOS ) - { - system_info info; - get_system_info( &info ); - cpu_count = info.cpu_count; - } - -#elif defined( SYS_DARWIN ) || defined( SYS_FREEBSD ) - FILE * info; - char buffer[16]; - - if( ( info = popen( "/usr/sbin/sysctl hw.ncpu", "r" ) ) ) - { - memset( buffer, 0, 16 ); - if( fgets( buffer, 15, info ) ) - { - if( sscanf( buffer, "hw.ncpu: %d", &cpu_count ) != 1 ) - { - cpu_count = 1; - } - } - fclose( info ); - } +#if defined(SYS_CYGWIN) || defined(SYS_MINGW) + SYSTEM_INFO cpuinfo; + GetSystemInfo( &cpuinfo ); + cpu_count = cpuinfo.dwNumberOfProcessors; -#elif defined( SYS_LINUX ) +#elif defined(SYS_LINUX) + unsigned int bit; + cpu_set_t p_aff; + memset( &p_aff, 0, sizeof(p_aff) ); + sched_getaffinity( 0, sizeof(p_aff), &p_aff ); + for( cpu_count = 0, bit = 0; bit < sizeof(p_aff); bit++ ) + cpu_count += (((uint8_t *)&p_aff)[bit / 8] >> (bit % 8)) & 1; + +#elif defined(SYS_BEOS) + system_info info; + get_system_info( &info ); + cpu_count = info.cpu_count; + +#elif defined(SYS_DARWIN) || defined(SYS_FREEBSD) || defined(SYS_OPENBSD) + 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) ) +#else + if( sysctlbyname("hw.ncpu", &cpu_count, &length, NULL, 0) ) +#endif { - FILE * info; - char buffer[8]; - - if( ( info = popen( "grep -c '^processor' /proc/cpuinfo", - "r" ) ) ) - { - memset( buffer, 0, 8 ); - if( fgets( buffer, 7, info ) ) - { - if( sscanf( buffer, "%d", &cpu_count ) != 1 ) - { - cpu_count = 1; - } - } - fclose( info ); - } + cpu_count = 1; } -#elif defined( SYS_CYGWIN ) - SYSTEM_INFO cpuinfo; - GetSystemInfo( &cpuinfo ); - cpu_count = cpuinfo.dwNumberOfProcessors; #elif defined( SYS_SunOS ) { processorid_t cpumax; @@ -180,7 +186,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 ) @@ -226,11 +232,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 } /************************************************************************ @@ -285,7 +291,7 @@ static void hb_thread_func( void * _t ) t->function( t->arg ); /* Inform that the thread can be joined now */ - hb_log( "thread %x exited (\"%s\")", t->thread, t->name ); + hb_deep_log( 2, "thread %x exited (\"%s\")", t->thread, t->name ); hb_lock( t->lock ); t->exited = 1; hb_unlock( t->lock ); @@ -330,7 +336,7 @@ hb_thread_t * hb_thread_init( char * name, void (* function)(void *), // SetThreadPriority( GetCurrentThread(), THREAD_PRIORITY_BELOW_NORMAL ); #endif - hb_log( "thread %x started (\"%s\")", t->thread, t->name ); + hb_deep_log( 2, "thread %x started (\"%s\")", t->thread, t->name ); return t; } @@ -355,7 +361,7 @@ void hb_thread_close( hb_thread_t ** _t ) // WaitForSingleObject( t->thread, INFINITE ); #endif - hb_log( "thread %x joined (\"%s\")", + hb_deep_log( 2, "thread %x joined (\"%s\")", t->thread, t->name ); hb_lock_close( &t->lock ); @@ -409,7 +415,15 @@ hb_lock_t * hb_lock_init() #if defined( SYS_BEOS ) l->sem = create_sem( 1, "sem" ); #elif USE_PTHREAD - pthread_mutex_init( &l->mutex, NULL ); + pthread_mutexattr_t mta; + + pthread_mutexattr_init(&mta); + +#if defined( SYS_CYGWIN ) + pthread_mutexattr_settype(&mta, PTHREAD_MUTEX_NORMAL); +#endif + + pthread_mutex_init( &l->mutex, &mta ); //#elif defined( SYS_CYGWIN ) // l->mutex = CreateMutex( 0, FALSE, 0 ); #endif