ReactOS 0.4.16-dev-1025-gd3456f5
ctime.cpp
Go to the documentation of this file.
1//
2// ctime.cpp
3//
4// Copyright (c) Microsoft Corporation. All rights reserved.
5//
6// The ctime() family of functions, which convert a time_t into a string.
7//
10
11
12
13// Converts a time stored as a time_t into a string of the form:
14//
15// Tue May 1 14:25:03 1984
16//
17// Returns zero on success; returns an error code and sets errno on failure. The
18// buffer is always null terminated as long as it is at least one character in
19// length.
20template <typename TimeType, typename Character>
22 _Out_writes_z_(size_in_chars) _Post_readable_size_(26) Character* const buffer,
23 _In_range_(>=,26) size_t const size_in_chars,
24 TimeType const* const time_t_value
25 ) throw()
26{
28
29 _VALIDATE_RETURN_ERRCODE(buffer != nullptr && size_in_chars > 0, EINVAL)
30
31 _RESET_STRING(buffer, size_in_chars);
32
33 _VALIDATE_RETURN_ERRCODE (size_in_chars >= 26, EINVAL)
34 _VALIDATE_RETURN_ERRCODE (time_t_value != nullptr, EINVAL)
35 _VALIDATE_RETURN_ERRCODE_NOEXC(*time_t_value >= 0, EINVAL)
36
37 tm tm_value;
38 errno_t const status = time_traits::localtime_s(&tm_value, time_t_value);
39 if (status != 0)
40 return status;
41
42 return time_traits::tasctime_s(buffer, size_in_chars, &tm_value);
43}
44
46 char* const buffer,
47 size_t const size_in_chars,
48 __time32_t const* const time_t_value
49 )
50{
51 return common_ctime_s(buffer, size_in_chars, time_t_value);
52}
53
55 wchar_t* const buffer,
56 size_t const size_in_chars,
57 __time32_t const* const time_t_value
58 )
59{
60 return common_ctime_s(buffer, size_in_chars, time_t_value);
61}
62
64 char* const buffer,
65 size_t const size_in_chars,
66 __time64_t const* const time_t_value
67 )
68{
69 return common_ctime_s(buffer, size_in_chars, time_t_value);
70}
71
73 wchar_t* const buffer,
74 size_t const size_in_chars,
75 __time64_t const* const time_t_value
76 )
77{
78 return common_ctime_s(buffer, size_in_chars, time_t_value);
79}
80
81
82
83// Converts a time stored as a time_t into a string of the form, just as the
84// secure _s version (defined above) does. Returns a pointer to a thread-local
85// buffer containing the resulting time string.
86template <typename TimeType, typename Character>
88_Success_(return != 0)
89static Character* __cdecl common_ctime(
90 TimeType const* const time_t_value
91 ) throw()
92{
94
95 _VALIDATE_RETURN (time_t_value != nullptr, EINVAL, nullptr)
96 _VALIDATE_RETURN_NOEXC(*time_t_value >= 0, EINVAL, nullptr)
97
98 tm tm_value;
99 errno_t const status = time_traits::localtime_s(&tm_value, time_t_value);
100 if (status != 0)
101 return nullptr;
102
103 return time_traits::tasctime(&tm_value);
104}
105
106extern "C" char* __cdecl _ctime32(__time32_t const* const time_t_value)
107{
108 return common_ctime<__time32_t, char>(time_t_value);
109}
110
111extern "C" wchar_t* __cdecl _wctime32(__time32_t const* const time_t_value)
112{
113 return common_ctime<__time32_t, wchar_t>(time_t_value);
114}
115
116extern "C" char* __cdecl _ctime64(__time64_t const* const time_t_value)
117{
118 return common_ctime<__time64_t, char>(time_t_value);
119}
120
121extern "C" wchar_t* __cdecl _wctime64(__time64_t const* const time_t_value)
122{
123 return common_ctime<__time64_t, wchar_t>(time_t_value);
124}
#define EINVAL
Definition: acclib.h:90
#define __cdecl
Definition: accygwin.h:79
return
Definition: dirsup.c:529
#define _RESET_STRING(_String, _Size)
#define _VALIDATE_RETURN(expr, errorcode, retexpr)
errno_t __cdecl _ctime64_s(char *const buffer, size_t const size_in_chars, __time64_t const *const time_t_value)
Definition: ctime.cpp:63
static errno_t __cdecl common_ctime_s(_Out_writes_z_(size_in_chars) _Post_readable_size_(26) Character *const buffer, _In_range_(>=, 26) size_t const size_in_chars, TimeType const *const time_t_value)
Definition: ctime.cpp:21
char *__cdecl _ctime64(__time64_t const *const time_t_value)
Definition: ctime.cpp:116
errno_t __cdecl _wctime32_s(wchar_t *const buffer, size_t const size_in_chars, __time32_t const *const time_t_value)
Definition: ctime.cpp:54
errno_t __cdecl _wctime64_s(wchar_t *const buffer, size_t const size_in_chars, __time64_t const *const time_t_value)
Definition: ctime.cpp:72
char *__cdecl _ctime32(__time32_t const *const time_t_value)
Definition: ctime.cpp:106
wchar_t *__cdecl _wctime64(__time64_t const *const time_t_value)
Definition: ctime.cpp:121
wchar_t *__cdecl _wctime32(__time32_t const *const time_t_value)
Definition: ctime.cpp:111
errno_t __cdecl _ctime32_s(char *const buffer, size_t const size_in_chars, __time32_t const *const time_t_value)
Definition: ctime.cpp:45
result_buffer_count char *const _In_ int const _In_ bool const _In_ unsigned const _In_ STRFLT const _In_ bool const _Inout_ __crt_cached_ptd_host &ptd throw()
Definition: cvt.cpp:119
GLuint buffer
Definition: glext.h:5915
#define _VALIDATE_RETURN_ERRCODE(expr, errorcode)
#define _VALIDATE_RETURN_NOEXC(expr, errorcode, retexpr)
#define _VALIDATE_RETURN_ERRCODE_NOEXC(expr, errorcode)
#define _Out_writes_z_(s)
Definition: no_sal2.h:180
#define _Post_readable_size_(s)
Definition: no_sal2.h:536
#define _Success_(c)
Definition: no_sal2.h:84
#define _Ret_writes_z_(s)
Definition: no_sal2.h:312
#define _In_range_(l, h)
Definition: no_sal2.h:368
long __time32_t
Definition: time.h:24
Definition: ps.c:97
Definition: time.h:68
int errno_t
Definition: corecrt.h:615
__int64 __time64_t
Definition: corecrt.h:619
#define const
Definition: zconf.h:233