diff options
author | Paul Davis <paul@linuxaudiosystems.com> | 2013-07-11 15:00:22 -0400 |
---|---|---|
committer | Paul Davis <paul@linuxaudiosystems.com> | 2013-07-11 15:00:22 -0400 |
commit | c43ff1113d89db0250ad092b9c213092cd4b8a92 (patch) | |
tree | b02c69d6d70e6d2ca2bde6c989695222baa67859 /libs/pbd/localtime_r.cc | |
parent | 5d125e1eaeb95e95117007cd6d5501ce97310ad8 (diff) |
Add ::localtime_r implementation for mingw
Diffstat (limited to 'libs/pbd/localtime_r.cc')
-rw-r--r-- | libs/pbd/localtime_r.cc | 41 |
1 files changed, 41 insertions, 0 deletions
diff --git a/libs/pbd/localtime_r.cc b/libs/pbd/localtime_r.cc new file mode 100644 index 0000000000..26e9dcc4a4 --- /dev/null +++ b/libs/pbd/localtime_r.cc @@ -0,0 +1,41 @@ +#ifdef WAF_BUILD +#include "libpbd-config.h" +#endif + +#ifndef HAVE_LOCALTIME_R +#include <time.h> +#include <string.h> +#include <pthread.h> + +#include "pbd/localtime_r.h" + +#ifdef localtime_r +#undef localtime_r +#endif + +struct tm * +localtime_r(const time_t *const timep, struct tm *p_tm) +{ + static pthread_mutex_t time_mutex; + static int time_mutex_inited = 0; + struct tm *tmp; + + if (!time_mutex_inited) + { + time_mutex_inited = 1; + pthread_mutex_init(&time_mutex, NULL); + } + + pthread_mutex_lock(&time_mutex); + tmp = localtime(timep); + if (tmp) + { + memcpy(p_tm, tmp, sizeof(struct tm)); + tmp = p_tm; + } + pthread_mutex_unlock(&time_mutex); + + return tmp; +} + +#endif |