#include <babeltrace/babeltrace-internal.h>
#include <babeltrace/common-internal.h>
+#include <pthread.h>
+
+#ifdef __CYGWIN__
+extern unsigned long pthread_getsequence_np(pthread_t *);
+#endif
/* When defined, Android log (android/log.h) will be used by default instead of
* stderr (ignored on non-Android platforms). Date, time, pid and tid (context)
#include <sys/time.h>
#if defined(__linux__)
#include <linux/limits.h>
+ #elif (defined(__sun__) || defined(__CYGWIN__))
+ /* Solaris and Cygwin have no sys/syslimits.h */
#else
#include <sys/syslimits.h>
#endif
#define memccpy _memccpy
#endif
-#if (defined(_MSC_VER) && !defined(__INTEL_COMPILER)) || defined(__MINGW64__)
+#if (defined(_MSC_VER) && !defined(__INTEL_COMPILER)) || \
+ (defined(__MINGW64__) && !defined(__USE_MINGW_ANSI_STDIO))
#define vsnprintf(s, sz, fmt, va) fake_vsnprintf(s, sz, fmt, va)
static int fake_vsnprintf(char *s, size_t sz, const char *fmt, va_list ap)
{
BT_LOG_DEFINE_GLOBAL_OUTPUT_LEVEL = 0;
#endif
+BT_HIDDEN
const bt_log_spec _bt_log_stderr_spec =
{
BT_LOG_GLOBAL_FORMAT,
#define TCACHE_FLUID (0x40000000 | 0x80000000)
static unsigned g_tcache_mode = TCACHE_STALE;
static struct timeval g_tcache_tv = {0, 0};
-static struct tm g_tcache_tm = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
+static struct tm g_tcache_tm = {0};
static INLINE int tcache_get(const struct timeval *const tv, struct tm *const tm)
{
#else
#if defined(_WIN32) || defined(_WIN64)
*tid = GetCurrentThreadId();
+ #elif defined(__CYGWIN__)
+ pthread_t thr = pthread_self();
+ *tid = (int)pthread_getsequence_np(&thr);
+ #elif defined(__sun__)
+ *tid = (int)pthread_self();
#elif defined(__ANDROID__)
*tid = gettid();
#elif defined(__linux__)
const unsigned w, const char wc, char *const e)
{
static const char _signs[] = {'-', '0', '+'};
- static const char *const signs = _signs + 1;
+ const char *const signs = _signs + 1;
char *p = e;
do { *--p = '0' + v % 10; } while (0 != (v /= 10));
if (0 == sign) return put_padding_r(w, wc, p, e);