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