*/
#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 <stddef.h>
#include <stdlib.h>
#include <stdio.h>
+
+#define BT_LOG_OUTPUT_LEVEL dummy
+
#include <babeltrace/logging-internal.h>
#include <babeltrace/logging.h>
#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 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__)
msg.lvl = lvl;
msg.tag = tag;
g_buffer_cb(&msg, buf);
+ const char *rst_color_p = bt_common_color_reset();
+ const char *rst_color_e = rst_color_p + strlen(rst_color_p);
+ const char *color_p = "";
+ const char *color_e = color_p;
+
+ switch (lvl) {
+ case BT_LOG_INFO:
+ color_p = bt_common_color_fg_blue();
+ color_e = color_p + strlen(color_p);
+ break;
+ case BT_LOG_WARN:
+ color_p = bt_common_color_fg_yellow();
+ color_e = color_p + strlen(color_p);
+ break;
+ case BT_LOG_ERROR:
+ case BT_LOG_FATAL:
+ color_p = bt_common_color_fg_red();
+ color_e = color_p + strlen(color_p);
+ break;
+ default:
+ break;
+ }
+
+ msg.p = put_stringn(color_p, color_e, msg.p, msg.e);
+
if (BT_LOG_PUT_CTX & mask)
{
put_ctx(&msg);
{
put_msg(&msg, fmt, va);
}
+ msg.p = put_stringn(rst_color_p, rst_color_e, msg.p, msg.e);
log->output->callback(&msg, log->output->arg);
if (0 != mem && BT_LOG_PUT_MSG & mask)
{