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 | |
parent | 5d125e1eaeb95e95117007cd6d5501ce97310ad8 (diff) |
Add ::localtime_r implementation for mingw
Diffstat (limited to 'libs/pbd')
-rw-r--r-- | libs/pbd/localtime_r.cc | 41 | ||||
-rw-r--r-- | libs/pbd/pbd/localtime_r.h | 7 | ||||
-rw-r--r-- | libs/pbd/wscript | 2 |
3 files changed, 50 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 diff --git a/libs/pbd/pbd/localtime_r.h b/libs/pbd/pbd/localtime_r.h new file mode 100644 index 0000000000..2e7c7aa149 --- /dev/null +++ b/libs/pbd/pbd/localtime_r.h @@ -0,0 +1,7 @@ +#ifndef PBD_LOCALTIME_R +#define PBD_LOCALTIME_R +#include <time.h> + +extern struct tm *localtime_r(const time_t *const timep, struct tm *p_tm); + +#endif diff --git a/libs/pbd/wscript b/libs/pbd/wscript index ebf7f64ab4..797f6e2cad 100644 --- a/libs/pbd/wscript +++ b/libs/pbd/wscript @@ -52,6 +52,7 @@ libpbd_sources = [ 'glib_semaphore.cc', 'id.cc', 'locale_guard.cc', + 'localtime_r.cc', 'malign.cc', 'mountpoint.cc', 'openuri.cc', @@ -96,6 +97,7 @@ def configure(conf): conf.check(header_name='execinfo.h', define_name='HAVE_EXECINFO',mandatory=False) conf.check(header_name='unistd.h', define_name='HAVE_UNISTD',mandatory=False) conf.check_cc(function_name='posix_memalign', header_name='stdlib.h', cflags='-D_XOPEN_SOURCE=600', define_name='HAVE_POSIX_MEMALIGN', mandatory=False) + conf.check(function_name='localtime_r', header_name='time.h', define_name='HAVE_LOCALTIME_R',mandatory=False) conf.write_config_header('libpbd-config.h', remove=False) |