blob: 58dbb113fe5b6163109ed2ac6440fd09435ad653 [file] [log] [blame]
Kai Tietzdba18ae2012-08-07 10:33:12 +00001#include <windows.h>
2#include <malloc.h>
3#include <time.h>
4#include <errno.h>
Jacek Cabana5c387c2013-06-17 13:12:21 +00005#include <msvcrt.h>
Kai Tietzdba18ae2012-08-07 10:33:12 +00006
Kai Tietzdba18ae2012-08-07 10:33:12 +00007static errno_t __cdecl _int_localtime64_s (struct tm *, const __time64_t *);
8static errno_t __cdecl _stub (struct tm *, const __time64_t *);
9
10errno_t __cdecl (*__MINGW_IMP_SYMBOL(_localtime64_s))(struct tm *, const __time64_t *) =
11 _stub;
12
13static errno_t __cdecl
14_stub (struct tm *ptm, const __time64_t *pt)
15{
16 errno_t __cdecl (*f)(struct tm *, const __time64_t *) = __MINGW_IMP_SYMBOL(_localtime64_s);
17
18 if (f == _stub)
19 {
Martin Storsjöf4f972f2024-09-18 15:05:06 +030020 f = (void*)
Kai Tietzdba18ae2012-08-07 10:33:12 +000021 GetProcAddress (__mingw_get_msvcrt_handle (), "_localtime64_s");
22 if (!f)
23 f = _int_localtime64_s;
24 __MINGW_IMP_SYMBOL(_localtime64_s) = f;
25 }
26 return (*f)(ptm, pt);
27}
28
29errno_t __cdecl
30_localtime64_s (struct tm *ptm, const __time64_t *pt)
31{
32 return _stub (ptm, pt);
33}
34
35static errno_t __cdecl
36_int_localtime64_s (struct tm *ptm, const __time64_t *pt)
37{
38 struct tm *ltm;
Kai Tietzdba18ae2012-08-07 10:33:12 +000039
40 if (ptm)
41 memset (ptm, 0xff, sizeof (*ptm));
42 if (!ptm || !pt)
43 {
44 errno = EINVAL;
45 return EINVAL;
46 }
47 if ((ltm = _localtime64 (pt)) == NULL)
48 return errno;
49 *ptm = *ltm;
50 return 0;
51}