#include <machine/cpu.h>
#endif
+#ifdef SYS_MINGW
+#include <winsock2.h>
+#include <ws2tcpip.h>
+#else
+#include <sys/types.h>
+#include <sys/socket.h>
+#include <netdb.h>
+#include <netinet/in.h>
+#endif
+
#ifdef SYS_CYGWIN
#include <windows.h>
#endif
#include <time.h>
#include <sys/time.h>
-
-#ifdef SYS_MINGW
-#include <winsock2.h>
-#include <ws2tcpip.h>
-#else
-#include <sys/types.h>
-#include <sys/socket.h>
-#include <netdb.h>
-#include <netinet/in.h>
-#endif
-
#if defined( SYS_LINUX )
#include <linux/cdrom.h>
#include <fcntl.h>
#endif
#include <stddef.h>
+#include <unistd.h>
#include "hb.h"
#endif
cpu_count = MAX( 1, cpu_count );
- cpu_count = MIN( cpu_count, 8 );
+ cpu_count = MIN( cpu_count, 64 );
return cpu_count;
}
/************************************************************************
- * Get a tempory directory for HB
+ * Get a temporary directory for HB
***********************************************************************/
-void hb_get_tempory_directory( hb_handle_t * h, char path[512] )
+void hb_get_temporary_directory( char path[512] )
{
char base[512];
if( base[strlen(base)-1] == '/' )
base[strlen(base)-1] = '\0';
- snprintf( path, 512, "%s/hb.%d", base, hb_get_pid( h ) );
+ snprintf( path, 512, "%s/hb.%d", base, getpid() );
}
/************************************************************************
{
va_list args;
- hb_get_tempory_directory( h, name );
+ hb_get_temporary_directory( name );
strcat( name, "/" );
va_start( args, fmt );
#endif
}
+void hb_clock_gettime( struct timespec *tp )
+{
+ struct timeval tv;
+ time_t sec;
+
+ sec = time( NULL );
+ gettimeofday( &tv, NULL );
+ tp->tv_sec = tv.tv_sec;
+ tp->tv_nsec = tv.tv_usec * 1000;
+}
+
+void hb_cond_timedwait( hb_cond_t * c, hb_lock_t * lock, int msec )
+{
+#if defined( SYS_BEOS )
+ c->thread = find_thread( NULL );
+ release_sem( lock->sem );
+ suspend_thread( c->thread );
+ acquire_sem( lock->sem );
+ c->thread = -1;
+#elif USE_PTHREAD
+ struct timespec ts;
+ hb_clock_gettime(&ts);
+ ts.tv_nsec += (msec % 1000) * 1000000;
+ ts.tv_sec += msec / 1000 + (ts.tv_nsec / 1000000000);
+ ts.tv_nsec %= 1000000000;
+ pthread_cond_timedwait( &c->cond, &lock->mutex, &ts );
+#endif
+}
+
void hb_cond_signal( hb_cond_t * c )
{
#if defined( SYS_BEOS )
#endif
}
+void hb_cond_broadcast( hb_cond_t * c )
+{
+#if USE_PTHREAD
+ pthread_cond_broadcast( &c->cond );
+#endif
+}
+
/************************************************************************
* Network
***********************************************************************/
*_n = NULL;
}
+#ifdef SYS_MINGW
+char *strtok_r(char *s, const char *delim, char **save_ptr)
+{
+ char *token;
+
+ if (s == NULL) s = *save_ptr;
+
+ /* Scan leading delimiters. */
+ s += strspn(s, delim);
+ if (*s == '\0') return NULL;
+
+ /* Find the end of the token. */
+ token = s;
+ s = strpbrk(token, delim);
+ if (s == NULL)
+ /* This token finishes the string. */
+ *save_ptr = strchr(token, '\0');
+ else {
+ /* Terminate the token and make *SAVE_PTR point past it. */
+ *s = '\0';
+ *save_ptr = s + 1;
+ }
+
+ return token;
+}
+#endif