Commit 23c3cd8d7ae77ea4cd17e8f7fb02491fc3ac3133
1 parent
25979161
add some definitions to get this build under mingw
Showing
4 changed files
with
109 additions
and
3 deletions
... | ... | @@ -24,8 +24,21 @@ |
24 | 24 | #ifndef __TR_TIMER_H__ |
25 | 25 | #define __TR_TIMER_H__ |
26 | 26 | |
27 | +#include <time.h> | |
28 | + | |
27 | 29 | #include "trbase.h" |
28 | 30 | |
31 | +#ifdef _WIN32 | |
32 | +struct timespec { | |
33 | + time_t tv_sec; | |
34 | + long tv_nsec; | |
35 | +}; | |
36 | + | |
37 | +#define CLOCK_REALTIME 1 | |
38 | + | |
39 | +int clock_gettime(int, struct timespec *tv); | |
40 | +#endif | |
41 | + | |
29 | 42 | typedef enum { |
30 | 43 | TR_TBASE_NAN = 0, |
31 | 44 | TR_TBASE_MIC, | ... | ... |
... | ... | @@ -20,11 +20,22 @@ |
20 | 20 | * along with this program. If not, see <http://www.gnu.org/licenses/>. |
21 | 21 | */ |
22 | 22 | |
23 | -#include <execinfo.h> | |
24 | 23 | #include <stdio.h> |
25 | 24 | #include <stdlib.h> |
26 | 25 | |
27 | 26 | /* Obtain a backtrace and print it to stdout. */ |
27 | +#ifdef _WIN32 | |
28 | + | |
29 | +void | |
30 | +print_trace (void) | |
31 | +{ | |
32 | + printf ("sorry, bo backtrace under Windows now!\n"); | |
33 | +} | |
34 | + | |
35 | +#else | |
36 | + | |
37 | +#include <execinfo.h> | |
38 | + | |
28 | 39 | void |
29 | 40 | print_trace (void) |
30 | 41 | { |
... | ... | @@ -44,4 +55,6 @@ print_trace (void) |
44 | 55 | free (strings); |
45 | 56 | } |
46 | 57 | |
58 | +#endif | |
59 | + | |
47 | 60 | // vim: set ts=4 sw=4: | ... | ... |
... | ... | @@ -20,12 +20,25 @@ |
20 | 20 | * along with this program. If not, see <http://www.gnu.org/licenses/>. |
21 | 21 | */ |
22 | 22 | |
23 | -#include <syslog.h> | |
24 | - | |
25 | 23 | #include "trbase.h" |
26 | 24 | #include "tr/logger.h" |
27 | 25 | #include "tr/interface/logger.h" |
28 | 26 | |
27 | +#ifdef _WIN32 | |
28 | + | |
29 | +#include <stdio.h> | |
30 | + | |
31 | +static | |
32 | +void | |
33 | +logSyslog(void * this, TR_logger_level level, const char * const msg) | |
34 | +{ | |
35 | + printf("Sorry, no syslog under Windows!\n"); | |
36 | +} | |
37 | + | |
38 | +#else | |
39 | + | |
40 | +#include <syslog.h> | |
41 | + | |
29 | 42 | static |
30 | 43 | const |
31 | 44 | int syslog_priority[] = { |
... | ... | @@ -46,6 +59,8 @@ logSyslog(void * this, TR_logger_level level, const char * const msg) |
46 | 59 | syslog(syslog_priority[level], "[%s] %s", TR_logger_level_str[level], msg); |
47 | 60 | } |
48 | 61 | |
62 | +#endif | |
63 | + | |
49 | 64 | TR_INIT_IFACE(TR_Logger, logSyslog); |
50 | 65 | TR_CREATE_CLASS(TR_LoggerSyslog, TR_Logger, NULL, TR_IF(TR_Logger)); |
51 | 66 | ... | ... |
... | ... | @@ -24,6 +24,71 @@ |
24 | 24 | |
25 | 25 | #include "trbase.h" |
26 | 26 | |
27 | +#ifdef _WIN32 | |
28 | +#include <Windows.h> | |
29 | + | |
30 | +static | |
31 | +LARGE_INTEGER | |
32 | +getFILETIMEoffset() | |
33 | +{ | |
34 | + SYSTEMTIME s; | |
35 | + FILETIME f; | |
36 | + LARGE_INTEGER t; | |
37 | + | |
38 | + s.wYear = 1970; | |
39 | + s.wMonth = 1; | |
40 | + s.wDay = 1; | |
41 | + s.wHour = 0; | |
42 | + s.wMinute = 0; | |
43 | + s.wSecond = 0; | |
44 | + s.wMilliseconds = 0; | |
45 | + SystemTimeToFileTime(&s, &f); | |
46 | + t.QuadPart = f.dwHighDateTime; | |
47 | + t.QuadPart <<= 32; | |
48 | + t.QuadPart |= f.dwLowDateTime; | |
49 | + return (t); | |
50 | +} | |
51 | + | |
52 | +int | |
53 | +clock_gettime(int X, struct timespec *tv) | |
54 | +{ | |
55 | + LARGE_INTEGER t; | |
56 | + FILETIME f; | |
57 | + double microseconds; | |
58 | + static LARGE_INTEGER offset; | |
59 | + static double frequencyToMicroseconds; | |
60 | + static int initialized = 0; | |
61 | + static BOOL usePerformanceCounter = 0; | |
62 | + | |
63 | + if (!initialized) { | |
64 | + LARGE_INTEGER performanceFrequency; | |
65 | + initialized = 1; | |
66 | + usePerformanceCounter = QueryPerformanceFrequency(&performanceFrequency); | |
67 | + if (usePerformanceCounter) { | |
68 | + QueryPerformanceCounter(&offset); | |
69 | + frequencyToMicroseconds = (double)performanceFrequency.QuadPart / 1000000.; | |
70 | + } else { | |
71 | + offset = getFILETIMEoffset(); | |
72 | + frequencyToMicroseconds = 10.; | |
73 | + } | |
74 | + } | |
75 | + if (usePerformanceCounter) QueryPerformanceCounter(&t); | |
76 | + else { | |
77 | + GetSystemTimeAsFileTime(&f); | |
78 | + t.QuadPart = f.dwHighDateTime; | |
79 | + t.QuadPart <<= 32; | |
80 | + t.QuadPart |= f.dwLowDateTime; | |
81 | + } | |
82 | + | |
83 | + t.QuadPart -= offset.QuadPart; | |
84 | + microseconds = (double)t.QuadPart / frequencyToMicroseconds; | |
85 | + t.QuadPart = microseconds; | |
86 | + tv->tv_sec = t.QuadPart / 1000000; | |
87 | + tv->tv_nsec = t.QuadPart % 1000000; | |
88 | + return (0); | |
89 | +} | |
90 | +#endif | |
91 | + | |
27 | 92 | static |
28 | 93 | int |
29 | 94 | timerCtor(void * _this, va_list * params) | ... | ... |
Please
register
or
login
to post a comment