1 #include <windows.h>
2 #include <malloc.h>
3 #include <time.h>
4 #include <errno.h>
5 #include <msvcrt.h>
6
7 static errno_t __cdecl _int_strtime_s (char *, size_t);
8 static errno_t __cdecl _stub (char *, size_t);
9
10 errno_t __cdecl (*__MINGW_IMP_SYMBOL(_strtime_s))(char *, size_t) =
11 _stub;
12
13 static errno_t __cdecl
_stub(char * d,size_t dn)14 _stub (char *d, size_t dn)
15 {
16 errno_t __cdecl (*f)(char *, size_t) = __MINGW_IMP_SYMBOL(_strtime_s);
17
18 if (f == _stub)
19 {
20 f = (errno_t __cdecl (*)(char *, size_t))
21 GetProcAddress (__mingw_get_msvcrt_handle (), "_strtime_s");
22 if (!f)
23 f = _int_strtime_s;
24 __MINGW_IMP_SYMBOL(_strtime_s) = f;
25 }
26 return (*f)(d, dn);
27 }
28
29 errno_t __cdecl
_strtime_s(char * d,size_t dn)30 _strtime_s (char *d, size_t dn)
31 {
32 return _stub (d, dn);
33 }
34
35 static errno_t __cdecl
_int_strtime_s(char * d,size_t dn)36 _int_strtime_s (char *d, size_t dn)
37 {
38 SYSTEMTIME dt;
39 int hours, minutes, seconds;
40
41 if (!d || !dn)
42 {
43 errno = EINVAL;
44 return EINVAL;
45 }
46
47 d[0] = 0;
48
49 if (dn < 9)
50 {
51 errno = ERANGE;
52 return ERANGE;
53 }
54
55 GetLocalTime (&dt);
56 dt.wYear %= 100;
57
58 hours = dt.wHour;
59 minutes = dt.wMinute;
60 seconds = dt.wSecond;
61
62 d[2] = d[5] = ':';
63 d[0] = (char) (hours / 10 + '0');
64 d[1] = (char) (hours % 10 + '0');
65 d[3] = (char) (minutes / 10 + '0');
66 d[4] = (char) (minutes % 10 + '0');
67 d[6] = (char) (seconds / 10 + '0');
68 d[7] = (char) (seconds % 10 + '0');
69 d[8] = 0;
70
71 return 0;
72 }
73