1 /*
2 Copyright (C) 2015-2021, Dirk Krause
3 SPDX-License-Identifier: BSD-3-Clause
4 */
5
6 /*
7 WARNING: This file was generated by the dkct program (see
8 http://dktools.sourceforge.net/ for details).
9 Changes you make here will be lost if dkct is run again!
10 You should modify the original source and run dkct on it.
11 Original source: dk4timewc.ctr
12 */
13
14 /** @file dk4timewc.c The dk4timewc module.
15 */
16
17
18 #include "dk4conf.h"
19
20 #if DK4_HAVE_ASSERT_H
21 #ifndef ASSERT_H_INCLUDED
22 #include <assert.h>
23 #define ASSERT_H_INCLUDED 1
24 #endif
25 #endif
26
27 #include <libdk4c/dk4timewc.h>
28
29 #ifndef DK4TIME08_H_INCLUDED
30 #include <libdk4c/dk4time08.h>
31 #endif
32
33 #ifndef DK4REC23_H_INCLUDED
34 #include <libdk4c/dk4rec23.h>
35 #endif
36
37
38
39 int
dk4time_to_text_wc(wchar_t * dptr,size_t dsz,int format,unsigned short year,unsigned short month,unsigned short mday,unsigned short hour,unsigned short min,unsigned short sec,dk4_er_t * erp)40 dk4time_to_text_wc(
41 wchar_t *dptr,
42 size_t dsz,
43 int format,
44 unsigned short year,
45 unsigned short month,
46 unsigned short mday,
47 unsigned short hour,
48 unsigned short min,
49 unsigned short sec,
50 dk4_er_t *erp
51 )
52 {
53 char buffer[64];
54 int back = 0;
55 #if DK4_USE_ASSERT
56 assert(NULL != dptr);
57 assert(0 < dsz);
58 #endif
59 back = dk4time_to_text_c8(
60 buffer, sizeof(buffer), format, year, month, mday, hour, min, sec, erp
61 );
62 if (0 != back) {
63 back = dk4recode_char_to_wchar_t(dptr, dsz, buffer, erp);
64 }
65 return back;
66 }
67
68
69
70 int
dk4time_convert_to_text_wc(wchar_t * dptr,size_t dsz,const struct tm * tm,dk4_er_t * erp)71 dk4time_convert_to_text_wc(
72 wchar_t *dptr, size_t dsz, const struct tm *tm, dk4_er_t *erp
73 )
74 {
75 int back = 0;
76 #if DK4_USE_ASSERT
77 assert(NULL != dptr);
78 assert(0 < dsz);
79 assert(NULL != tm);
80 #endif
81 if ((NULL != dptr) && (0 < dsz)) {
82 *dptr = L'\0';
83 if (NULL != tm) {
84 back = dk4time_to_text_wc(
85 dptr, dsz, DK4_TIMEFORMAT_DATE_TIME,
86 (unsigned short)(1900 + tm->tm_year),
87 (unsigned short)(1 + tm->tm_mon),
88 (unsigned short)(tm->tm_mday),
89 (unsigned short)(tm->tm_hour),
90 (unsigned short)(tm->tm_min),
91 (unsigned short)(tm->tm_sec),
92 erp
93 );
94 } else {
95 dk4error_set_simple_error_code(erp, DK4_E_INVALID_ARGUMENTS);
96 }
97 } else {
98 dk4error_set_simple_error_code(erp, DK4_E_INVALID_ARGUMENTS);
99 }
100 return back;
101 }
102
103
104
105 static
106 int
dk4time_i_as_text_wc(wchar_t * dptr,size_t dsz,const dk4_time_t * timer,dk4_er_t * erp)107 dk4time_i_as_text_wc(
108 wchar_t *dptr, size_t dsz, const dk4_time_t *timer, dk4_er_t *erp
109 )
110 {
111 #if DK4_ON_WINDOWS
112 /* +++ Windows */
113 struct tm lct;
114 int back = 0;
115 #if DK4_USE_ASSERT
116 assert(NULL != dptr);
117 assert(0 < dsz);
118 assert(NULL != timer);
119 #endif
120 if (0 == _localtime64_s(&lct, timer)) {
121 back = dk4time_convert_to_text_wc(dptr, dsz, &lct, erp);
122 } else {
123 dk4error_set_simple_error_code(erp, DK4_E_BUG);
124 }
125 return back;
126 /* --- Windows */
127 #else
128 /* +++ non-Windows */
129 #if DK4_HAVE_LOCALTIME_R
130 struct tm lct;
131 int back = 0;
132 #if DK4_USE_ASSERT
133 assert(NULL != dptr);
134 assert(0 < dsz);
135 assert(NULL != timer);
136 #endif
137 if (NULL != localtime_r(timer, &lct)) {
138 back = dk4time_convert_to_text_wc(dptr, dsz, &lct, erp);
139 } else {
140 dk4error_set_simple_error_code(erp, DK4_E_BUG);
141 }
142 return back;
143 #else
144 dk4error_set_simple_error_code(erp, DK4_E_NOT_SUPPORTED);
145 return 0;
146 #endif
147 /* --- non-Windows */
148 #endif
149 }
150
151
152
153 int
dk4time_as_text_wc(wchar_t * dptr,size_t dsz,const dk4_time_t * timer,dk4_er_t * erp)154 dk4time_as_text_wc(
155 wchar_t *dptr, size_t dsz, const dk4_time_t *timer, dk4_er_t *erp
156 )
157 {
158 int back = 0;
159 #if DK4_USE_ASSERT
160 assert(NULL != dptr);
161 assert(0 < dsz);
162 assert(NULL != timer);
163 #endif
164 if ((dptr != NULL) && (0 < dsz)) {
165 *dptr = L'\0';
166 if (NULL != timer) {
167 back = dk4time_i_as_text_wc(dptr, dsz, timer, erp);
168 } else {
169 dk4error_set_simple_error_code(erp, DK4_E_INVALID_ARGUMENTS);
170 }
171 } else {
172 dk4error_set_simple_error_code(erp, DK4_E_INVALID_ARGUMENTS);
173 }
174 return back;
175 }
176
177
178