From cb34b9a3b92b80796404945815ea8096fc7b7f78 Mon Sep 17 00:00:00 2001 From: Lammert Bies Date: Sun, 11 Dec 2016 20:31:47 +0100 Subject: [PATCH] Moved WIN32 clock_gettime to own file --- Makefile | 1 + src/libhttp.c | 53 ++++------------------------- src/win32_clock_gettime.c | 71 +++++++++++++++++++++++++++++++++++++++ 3 files changed, 78 insertions(+), 47 deletions(-) create mode 100644 src/win32_clock_gettime.c diff --git a/Makefile b/Makefile index 5782f06e..7c056794 100644 --- a/Makefile +++ b/Makefile @@ -237,6 +237,7 @@ LIB_SOURCES = src/libhttp.c \ src/httplib_websocket_write_exec.c \ src/httplib_worker_thread.c \ src/httplib_write.c \ + src/win32_clock_gettime.c \ src/win32_pthread_cond_broadcast.c \ src/win32_pthread_cond_destroy.c \ src/win32_pthread_cond_init.c \ diff --git a/src/libhttp.c b/src/libhttp.c index d10f9ff4..881af60c 100644 --- a/src/libhttp.c +++ b/src/libhttp.c @@ -225,7 +225,7 @@ void *XX_httplib_realloc_ex( void *memory, size_t newsize, const char *file, uns #else /* MEMORY_DEBUGGING */ -void * XX_httplib_malloc( size_t a ) { +void *XX_httplib_malloc( size_t a ) { return malloc(a); @@ -415,11 +415,11 @@ struct mg_option XX_httplib_config_options[] = { {NULL, CONFIG_TYPE_UNKNOWN, NULL}}; -/* Check if the XX_httplib_config_options and the corresponding enum have compatible - * sizes. */ -mg_static_assert((sizeof(XX_httplib_config_options) / sizeof(XX_httplib_config_options[0])) - == (NUM_OPTIONS + 1), - "XX_httplib_config_options and enum not sync"); +/* + * Check if the XX_httplib_config_options and the corresponding enum have + * compatible sizes + */ +mg_static_assert((sizeof(XX_httplib_config_options) / sizeof(XX_httplib_config_options[0])) == (NUM_OPTIONS + 1), "XX_httplib_config_options and enum not sync"); @@ -619,47 +619,6 @@ void XX_httplib_set_thread_name(const char *threadName) { #if defined(_WIN32) -#ifndef WIN_PTHREADS_TIME_H -int clock_gettime( clockid_t clk_id, struct timespec *tp ) { - - FILETIME ft; - ULARGE_INTEGER li; - BOOL ok = FALSE; - double d; - static double perfcnt_per_sec = 0.0; - - if (tp) { - memset(tp, 0, sizeof(*tp)); - if (clk_id == CLOCK_REALTIME) { - GetSystemTimeAsFileTime(&ft); - li.LowPart = ft.dwLowDateTime; - li.HighPart = ft.dwHighDateTime; - li.QuadPart -= 116444736000000000; /* 1.1.1970 in filedate */ - tp->tv_sec = (time_t)(li.QuadPart / 10000000); - tp->tv_nsec = (long)(li.QuadPart % 10000000) * 100; - ok = TRUE; - } else if (clk_id == CLOCK_MONOTONIC) { - if (perfcnt_per_sec == 0.0) { - QueryPerformanceFrequency((LARGE_INTEGER *)&li); - perfcnt_per_sec = 1.0 / li.QuadPart; - } - if (perfcnt_per_sec != 0.0) { - QueryPerformanceCounter((LARGE_INTEGER *)&li); - d = li.QuadPart * perfcnt_per_sec; - tp->tv_sec = (time_t)d; - d -= tp->tv_sec; - tp->tv_nsec = (long)(d * 1.0E9); - ok = TRUE; - } - } - } - - return ok ? 0 : -1; - -} /* clock_gettime */ -#endif - - #ifdef ALTERNATIVE_QUEUE static void * event_create(void) { diff --git a/src/win32_clock_gettime.c b/src/win32_clock_gettime.c new file mode 100644 index 00000000..6048a24c --- /dev/null +++ b/src/win32_clock_gettime.c @@ -0,0 +1,71 @@ +/* + * Copyright (c) 2016 Lammert Bies + * Copyright (c) 2013-2016 the Civetweb developers + * Copyright (c) 2004-2013 Sergey Lyubka + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ + + + +#include "libhttp-private.h" + + + +#if defined(_WIN32) && ! defined(WIN_PTHREADS_TIME_H) + +int clock_gettime( clockid_t clk_id, struct timespec *tp ) { + + FILETIME ft; + ULARGE_INTEGER li; + BOOL ok = FALSE; + double d; + static double perfcnt_per_sec = 0.0; + + if (tp) { + memset(tp, 0, sizeof(*tp)); + if (clk_id == CLOCK_REALTIME) { + GetSystemTimeAsFileTime(&ft); + li.LowPart = ft.dwLowDateTime; + li.HighPart = ft.dwHighDateTime; + li.QuadPart -= 116444736000000000; /* 1.1.1970 in filedate */ + tp->tv_sec = (time_t)(li.QuadPart / 10000000); + tp->tv_nsec = (long)(li.QuadPart % 10000000) * 100; + ok = TRUE; + } else if (clk_id == CLOCK_MONOTONIC) { + if (perfcnt_per_sec == 0.0) { + QueryPerformanceFrequency((LARGE_INTEGER *)&li); + perfcnt_per_sec = 1.0 / li.QuadPart; + } + if (perfcnt_per_sec != 0.0) { + QueryPerformanceCounter((LARGE_INTEGER *)&li); + d = li.QuadPart * perfcnt_per_sec; + tp->tv_sec = (time_t)d; + d -= tp->tv_sec; + tp->tv_nsec = (long)(d * 1.0E9); + ok = TRUE; + } + } + } + + return ok ? 0 : -1; + +} /* clock_gettime */ + +#endif