diff options
Diffstat (limited to 'src/os/time.c')
-rw-r--r-- | src/os/time.c | 86 |
1 files changed, 0 insertions, 86 deletions
diff --git a/src/os/time.c b/src/os/time.c deleted file mode 100644 index 1dc7ca68d4..0000000000 --- a/src/os/time.c +++ /dev/null @@ -1,86 +0,0 @@ -#include <stdint.h> -#include <stdbool.h> -#include <sys/time.h> - -#include <uv.h> - -#include "os/time.h" -#include "vim.h" -#include "term.h" - -static uv_mutex_t delay_mutex; -static uv_cond_t delay_cond; - -static void microdelay(uint64_t ms); - -void time_init() -{ - uv_mutex_init(&delay_mutex); - uv_cond_init(&delay_cond); -} - -void os_delay(uint64_t milliseconds, bool ignoreinput) -{ - os_microdelay(milliseconds * 1000, ignoreinput); -} - -void os_microdelay(uint64_t microseconds, bool ignoreinput) -{ - int old_tmode; - - if (ignoreinput) { - // Go to cooked mode without echo, to allow SIGINT interrupting us - // here - old_tmode = curr_tmode; - - if (curr_tmode == TMODE_RAW) - settmode(TMODE_SLEEP); - - microdelay(microseconds); - - settmode(old_tmode); - } else { - microdelay(microseconds); - } -} - -static void microdelay(uint64_t microseconds) -{ - uint64_t hrtime; - int64_t ns = microseconds * 1000; // convert to nanoseconds - - uv_mutex_lock(&delay_mutex); - - while (ns > 0) { - hrtime = uv_hrtime(); - if (uv_cond_timedwait(&delay_cond, &delay_mutex, ns) == UV_ETIMEDOUT) - break; - ns -= uv_hrtime() - hrtime; - } - - uv_mutex_unlock(&delay_mutex); -} - -struct tm *os_localtime_r(const time_t *clock, struct tm *result) -{ -#ifdef UNIX - // POSIX provides localtime_r() as a thread-safe version of localtime(). - return localtime_r(clock, result); -#else - // Windows version of localtime() is thread-safe. - // See http://msdn.microsoft.com/en-us/library/bf12f0hc%28VS.80%29.aspx - struct tm *local_time = localtime(clock); // NOLINT - *result = *local_time; -return result; -#endif -} - -struct tm *os_get_localtime(struct tm *result) -{ - struct timeval tv; - if (gettimeofday(&tv, NULL) < 0) { - return NULL; - } - - return os_localtime_r(&tv.tv_sec, result); -} |