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_strdate_s (char *, size_t);
8 static errno_t __cdecl _stub (char *, size_t);
9
10 errno_t __cdecl (*__MINGW_IMP_SYMBOL(_strdate_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(_strdate_s);
17
18 if (f == _stub)
19 {
20 f = (errno_t __cdecl (*)(char *, size_t))
21 GetProcAddress (__mingw_get_msvcrt_handle (), "_strdate_s");
22 if (!f)
23 f = _int_strdate_s;
24 __MINGW_IMP_SYMBOL(_strdate_s) = f;
25 }
26 return (*f)(d, dn);
27 }
28
29 errno_t __cdecl
_strdate_s(char * d,size_t dn)30 _strdate_s (char *d, size_t dn)
31 {
32 return _stub (d, dn);
33 }
34
35 static errno_t __cdecl
_int_strdate_s(char * d,size_t dn)36 _int_strdate_s (char *d, size_t dn)
37 {
38 SYSTEMTIME dt;
39
40 if (!d || !dn)
41 {
42 errno = EINVAL;
43 return EINVAL;
44 }
45
46 d[0] = 0;
47
48 if (dn < 9)
49 {
50 errno = ERANGE;
51 return ERANGE;
52 }
53
54 GetLocalTime (&dt);
55 dt.wYear %= 100;
56
57 d[0] = (char) (dt.wMonth / 10 + '0');
58 d[1] = (char) (dt.wMonth % 10 + '0');
59 d[2] = '/';
60 d[3] = (char) (dt.wDay / 10 + '0');
61 d[4] = (char) (dt.wDay % 10 + '0');
62 d[5] = '/';
63 d[6] = (char) (dt.wYear / 10 + '0');
64 d[7] = (char) (dt.wYear % 10 + '0');
65 d[8] = 0;
66
67 return 0;
68 }
69