]>
Commit | Line | Data |
---|---|---|
1ab65677 BK |
1 | // std::time_get, std::time_put implementation, GNU version -*- C++ -*- |
2 | ||
4b9aaf63 | 3 | // Copyright (C) 2001, 2002 Free Software Foundation, Inc. |
1ab65677 BK |
4 | // |
5 | // This file is part of the GNU ISO C++ Library. This library is free | |
6 | // software; you can redistribute it and/or modify it under the | |
7 | // terms of the GNU General Public License as published by the | |
8 | // Free Software Foundation; either version 2, or (at your option) | |
9 | // any later version. | |
10 | ||
11 | // This library is distributed in the hope that it will be useful, | |
12 | // but WITHOUT ANY WARRANTY; without even the implied warranty of | |
13 | // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
14 | // GNU General Public License for more details. | |
15 | ||
16 | // You should have received a copy of the GNU General Public License along | |
17 | // with this library; see the file COPYING. If not, write to the Free | |
18 | // Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, | |
19 | // USA. | |
20 | ||
21 | // As a special exception, you may use this file as part of a free software | |
22 | // library without restriction. Specifically, if other files instantiate | |
23 | // templates or use macros or inline functions from this file, or you compile | |
24 | // this file and link it with other files to produce an executable, this | |
25 | // file does not by itself cause the resulting executable to be covered by | |
26 | // the GNU General Public License. This exception does not however | |
27 | // invalidate any other reasons why the executable file might be covered by | |
28 | // the GNU General Public License. | |
29 | ||
30 | // | |
31 | // ISO C++ 14882: 22.2.5.1.2 - time_get virtual functions | |
32 | // ISO C++ 14882: 22.2.5.3.2 - time_put virtual functions | |
33 | // | |
34 | ||
35 | // Written by Benjamin Kosnik <bkoz@redhat.com> | |
36 | ||
37 | #include <locale> | |
89671b70 | 38 | #include "c++locale_internal.h" |
1ab65677 BK |
39 | |
40 | namespace std | |
41 | { | |
da5c0f6e BK |
42 | template<> |
43 | void | |
44 | __timepunct<char>:: | |
d3a193e3 BK |
45 | _M_put(char* __s, size_t __maxlen, const char* __format, |
46 | const tm* __tm) const | |
da5c0f6e | 47 | { |
99ffa1e3 | 48 | #if __GLIBC__ > 2 || (__GLIBC__ == 2 && __GLIBC_MINOR__ > 2) |
89671b70 | 49 | __strftime_l(__s, __maxlen, __format, __tm, _M_c_locale_timepunct); |
da5c0f6e | 50 | #else |
6d030676 PC |
51 | char* __old = strdup(setlocale(LC_ALL, NULL)); |
52 | setlocale(LC_ALL, _M_name_timepunct); | |
da5c0f6e | 53 | strftime(__s, __maxlen, __format, __tm); |
4b9aaf63 | 54 | setlocale(LC_ALL, __old); |
6d030676 | 55 | free(__old); |
da5c0f6e BK |
56 | #endif |
57 | } | |
58 | ||
1ab65677 BK |
59 | template<> |
60 | void | |
61 | __timepunct<char>::_M_initialize_timepunct(__c_locale __cloc) | |
62 | { | |
aa53f832 | 63 | if (!__cloc) |
1ab65677 BK |
64 | { |
65 | // "C" locale | |
aa53f832 | 66 | _M_c_locale_timepunct = _S_c_locale; |
89671b70 | 67 | |
da5c0f6e BK |
68 | _M_date_format = "%m/%d/%y"; |
69 | _M_date_era_format = "%m/%d/%y"; | |
1ab65677 BK |
70 | _M_time_format = "%H:%M:%S"; |
71 | _M_time_era_format = "%H:%M:%S"; | |
da5c0f6e BK |
72 | _M_date_time_format = ""; |
73 | _M_date_time_era_format = ""; | |
1ab65677 BK |
74 | _M_am = "AM"; |
75 | _M_pm = "PM"; | |
da5c0f6e BK |
76 | _M_am_pm_format = ""; |
77 | ||
1ab65677 BK |
78 | // Day names, starting with "C"'s Sunday. |
79 | _M_day1 = "Sunday"; | |
80 | _M_day2 = "Monday"; | |
81 | _M_day3 = "Tuesday"; | |
82 | _M_day4 = "Wednesday"; | |
83 | _M_day5 = "Thursday"; | |
84 | _M_day6 = "Friday"; | |
85 | _M_day7 = "Saturday"; | |
86 | ||
87 | // Abbreviated day names, starting with "C"'s Sun. | |
88 | _M_day_a1 = "Sun"; | |
89 | _M_day_a2 = "Mon"; | |
90 | _M_day_a3 = "Tue"; | |
91 | _M_day_a4 = "Wed"; | |
92 | _M_day_a5 = "Thu"; | |
93 | _M_day_a6 = "Fri"; | |
94 | _M_day_a7 = "Sat"; | |
95 | ||
96 | // Month names, starting with "C"'s January. | |
97 | _M_month01 = "January"; | |
98 | _M_month02 = "February"; | |
99 | _M_month03 = "March"; | |
100 | _M_month04 = "April"; | |
101 | _M_month05 = "May"; | |
102 | _M_month06 = "June"; | |
103 | _M_month07 = "July"; | |
104 | _M_month08 = "August"; | |
105 | _M_month09 = "September"; | |
106 | _M_month10 = "October"; | |
107 | _M_month11 = "November"; | |
108 | _M_month12 = "December"; | |
109 | ||
110 | // Abbreviated month names, starting with "C"'s Jan. | |
111 | _M_month_a01 = "Jan"; | |
112 | _M_month_a02 = "Feb"; | |
113 | _M_month_a03 = "Mar"; | |
114 | _M_month_a04 = "Apr"; | |
115 | _M_month_a05 = "May"; | |
116 | _M_month_a06 = "Jun"; | |
117 | _M_month_a07 = "July"; | |
118 | _M_month_a08 = "Aug"; | |
119 | _M_month_a09 = "Sep"; | |
120 | _M_month_a10 = "Oct"; | |
121 | _M_month_a11 = "Nov"; | |
122 | _M_month_a12 = "Dec"; | |
123 | } | |
124 | else | |
125 | { | |
126 | _M_c_locale_timepunct = _S_clone_c_locale(__cloc); | |
127 | ||
128 | _M_date_format = __nl_langinfo_l(D_FMT, __cloc); | |
129 | _M_date_era_format = __nl_langinfo_l(ERA_D_FMT, __cloc); | |
130 | _M_time_format = __nl_langinfo_l(T_FMT, __cloc); | |
131 | _M_time_era_format = __nl_langinfo_l(ERA_T_FMT, __cloc); | |
da5c0f6e BK |
132 | _M_date_time_format = __nl_langinfo_l(D_T_FMT, __cloc); |
133 | _M_date_time_era_format = __nl_langinfo_l(ERA_D_T_FMT, __cloc); | |
1ab65677 BK |
134 | _M_am = __nl_langinfo_l(AM_STR, __cloc); |
135 | _M_pm = __nl_langinfo_l(PM_STR, __cloc); | |
da5c0f6e | 136 | _M_am_pm_format = __nl_langinfo_l(T_FMT_AMPM, __cloc); |
1ab65677 BK |
137 | |
138 | // Day names, starting with "C"'s Sunday. | |
139 | _M_day1 = __nl_langinfo_l(DAY_1, __cloc); | |
140 | _M_day2 = __nl_langinfo_l(DAY_2, __cloc); | |
141 | _M_day3 = __nl_langinfo_l(DAY_3, __cloc); | |
142 | _M_day4 = __nl_langinfo_l(DAY_4, __cloc); | |
143 | _M_day5 = __nl_langinfo_l(DAY_5, __cloc); | |
144 | _M_day6 = __nl_langinfo_l(DAY_6, __cloc); | |
145 | _M_day7 = __nl_langinfo_l(DAY_7, __cloc); | |
146 | ||
147 | // Abbreviated day names, starting with "C"'s Sun. | |
148 | _M_day_a1 = __nl_langinfo_l(ABDAY_1, __cloc); | |
149 | _M_day_a2 = __nl_langinfo_l(ABDAY_2, __cloc); | |
150 | _M_day_a3 = __nl_langinfo_l(ABDAY_3, __cloc); | |
151 | _M_day_a4 = __nl_langinfo_l(ABDAY_4, __cloc); | |
152 | _M_day_a5 = __nl_langinfo_l(ABDAY_5, __cloc); | |
153 | _M_day_a6 = __nl_langinfo_l(ABDAY_6, __cloc); | |
154 | _M_day_a7 = __nl_langinfo_l(ABDAY_7, __cloc); | |
155 | ||
156 | // Month names, starting with "C"'s January. | |
157 | _M_month01 = __nl_langinfo_l(MON_1, __cloc); | |
158 | _M_month02 = __nl_langinfo_l(MON_2, __cloc); | |
159 | _M_month03 = __nl_langinfo_l(MON_3, __cloc); | |
160 | _M_month04 = __nl_langinfo_l(MON_4, __cloc); | |
161 | _M_month05 = __nl_langinfo_l(MON_5, __cloc); | |
162 | _M_month06 = __nl_langinfo_l(MON_6, __cloc); | |
163 | _M_month07 = __nl_langinfo_l(MON_7, __cloc); | |
164 | _M_month08 = __nl_langinfo_l(MON_8, __cloc); | |
165 | _M_month09 = __nl_langinfo_l(MON_9, __cloc); | |
166 | _M_month10 = __nl_langinfo_l(MON_10, __cloc); | |
167 | _M_month11 = __nl_langinfo_l(MON_11, __cloc); | |
168 | _M_month12 = __nl_langinfo_l(MON_12, __cloc); | |
169 | ||
170 | // Abbreviated month names, starting with "C"'s Jan. | |
171 | _M_month_a01 = __nl_langinfo_l(ABMON_1, __cloc); | |
172 | _M_month_a02 = __nl_langinfo_l(ABMON_2, __cloc); | |
173 | _M_month_a03 = __nl_langinfo_l(ABMON_3, __cloc); | |
174 | _M_month_a04 = __nl_langinfo_l(ABMON_4, __cloc); | |
175 | _M_month_a05 = __nl_langinfo_l(ABMON_5, __cloc); | |
176 | _M_month_a06 = __nl_langinfo_l(ABMON_6, __cloc); | |
177 | _M_month_a07 = __nl_langinfo_l(ABMON_7, __cloc); | |
178 | _M_month_a08 = __nl_langinfo_l(ABMON_8, __cloc); | |
179 | _M_month_a09 = __nl_langinfo_l(ABMON_9, __cloc); | |
180 | _M_month_a10 = __nl_langinfo_l(ABMON_10, __cloc); | |
181 | _M_month_a11 = __nl_langinfo_l(ABMON_11, __cloc); | |
182 | _M_month_a12 = __nl_langinfo_l(ABMON_12, __cloc); | |
183 | } | |
184 | } | |
185 | ||
186 | #ifdef _GLIBCPP_USE_WCHAR_T | |
da5c0f6e BK |
187 | template<> |
188 | void | |
189 | __timepunct<wchar_t>:: | |
d3a193e3 BK |
190 | _M_put(wchar_t* __s, size_t __maxlen, const wchar_t* __format, |
191 | const tm* __tm) const | |
da5c0f6e | 192 | { |
99ffa1e3 | 193 | #if __GLIBC__ > 2 || (__GLIBC__ == 2 && __GLIBC_MINOR__ > 2) |
89671b70 | 194 | __wcsftime_l(__s, __maxlen, __format, __tm, _M_c_locale_timepunct); |
da5c0f6e | 195 | #else |
6d030676 PC |
196 | char* __old = strdup(setlocale(LC_ALL, NULL)); |
197 | setlocale(LC_ALL, _M_name_timepunct); | |
da5c0f6e | 198 | wcsftime(__s, __maxlen, __format, __tm); |
4b9aaf63 | 199 | setlocale(LC_ALL, __old); |
6d030676 | 200 | free(__old); |
da5c0f6e BK |
201 | #endif |
202 | } | |
203 | ||
1ab65677 BK |
204 | template<> |
205 | void | |
206 | __timepunct<wchar_t>::_M_initialize_timepunct(__c_locale __cloc) | |
207 | { | |
aa53f832 | 208 | if (!__cloc) |
1ab65677 BK |
209 | { |
210 | // "C" locale | |
aa53f832 | 211 | _M_c_locale_timepunct = _S_c_locale; |
89671b70 | 212 | |
da5c0f6e BK |
213 | _M_date_format = L"%m/%d/%y"; |
214 | _M_date_era_format = L"%m/%d/%y"; | |
215 | _M_time_format = L"%H:%M:%S"; | |
216 | _M_time_era_format = L"%H:%M:%S"; | |
217 | _M_date_time_format = L""; | |
218 | _M_date_time_era_format = L""; | |
219 | _M_am = L"AM"; | |
220 | _M_pm = L"PM"; | |
221 | _M_am_pm_format = L""; | |
222 | ||
223 | // Day names, starting with "C"'s Sunday. | |
224 | _M_day1 = L"Sunday"; | |
225 | _M_day2 = L"Monday"; | |
226 | _M_day3 = L"Tuesday"; | |
227 | _M_day4 = L"Wednesday"; | |
228 | _M_day5 = L"Thursday"; | |
229 | _M_day6 = L"Friday"; | |
230 | _M_day7 = L"Saturday"; | |
231 | ||
232 | // Abbreviated day names, starting with "C"'s Sun. | |
233 | _M_day_a1 = L"Sun"; | |
234 | _M_day_a2 = L"Mon"; | |
235 | _M_day_a3 = L"Tue"; | |
236 | _M_day_a4 = L"Wed"; | |
237 | _M_day_a5 = L"Thu"; | |
238 | _M_day_a6 = L"Fri"; | |
239 | _M_day_a7 = L"Sat"; | |
240 | ||
241 | // Month names, starting with "C"'s January. | |
242 | _M_month01 = L"January"; | |
243 | _M_month02 = L"February"; | |
244 | _M_month03 = L"March"; | |
245 | _M_month04 = L"April"; | |
246 | _M_month05 = L"May"; | |
247 | _M_month06 = L"June"; | |
248 | _M_month07 = L"July"; | |
249 | _M_month08 = L"August"; | |
250 | _M_month09 = L"September"; | |
251 | _M_month10 = L"October"; | |
252 | _M_month11 = L"November"; | |
253 | _M_month12 = L"December"; | |
254 | ||
255 | // Abbreviated month names, starting with "C"'s Jan. | |
256 | _M_month_a01 = L"Jan"; | |
257 | _M_month_a02 = L"Feb"; | |
258 | _M_month_a03 = L"Mar"; | |
259 | _M_month_a04 = L"Apr"; | |
260 | _M_month_a05 = L"May"; | |
261 | _M_month_a06 = L"Jun"; | |
262 | _M_month_a07 = L"July"; | |
263 | _M_month_a08 = L"Aug"; | |
264 | _M_month_a09 = L"Sep"; | |
265 | _M_month_a10 = L"Oct"; | |
266 | _M_month_a11 = L"Nov"; | |
267 | _M_month_a12 = L"Dec"; | |
1ab65677 BK |
268 | } |
269 | else | |
270 | { | |
271 | _M_c_locale_timepunct = _S_clone_c_locale(__cloc); | |
da5c0f6e BK |
272 | |
273 | _M_date_format = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WD_FMT, __cloc)); | |
274 | _M_date_era_format = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WERA_D_FMT, __cloc)); | |
275 | _M_time_format = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WT_FMT, __cloc)); | |
276 | _M_time_era_format = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WERA_T_FMT, __cloc)); | |
277 | _M_date_time_format = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WD_T_FMT, __cloc)); | |
278 | _M_date_time_era_format = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WERA_D_T_FMT, __cloc)); | |
279 | _M_am = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WAM_STR, __cloc)); | |
280 | _M_pm = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WPM_STR, __cloc)); | |
281 | _M_am_pm_format = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WT_FMT_AMPM, __cloc)); | |
282 | ||
283 | // Day names, starting with "C"'s Sunday. | |
284 | _M_day1 = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WDAY_1, __cloc)); | |
285 | _M_day2 = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WDAY_2, __cloc)); | |
286 | _M_day3 = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WDAY_3, __cloc)); | |
287 | _M_day4 = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WDAY_4, __cloc)); | |
288 | _M_day5 = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WDAY_5, __cloc)); | |
289 | _M_day6 = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WDAY_6, __cloc)); | |
290 | _M_day7 = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WDAY_7, __cloc)); | |
291 | ||
292 | // Abbreviated day names, starting with "C"'s Sun. | |
293 | _M_day_a1 = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WABDAY_1, __cloc)); | |
294 | _M_day_a2 = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WABDAY_2, __cloc)); | |
295 | _M_day_a3 = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WABDAY_3, __cloc)); | |
296 | _M_day_a4 = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WABDAY_4, __cloc)); | |
297 | _M_day_a5 = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WABDAY_5, __cloc)); | |
298 | _M_day_a6 = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WABDAY_6, __cloc)); | |
299 | _M_day_a7 = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WABDAY_7, __cloc)); | |
300 | ||
301 | // Month names, starting with "C"'s January. | |
302 | _M_month01 = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WMON_1, __cloc)); | |
303 | _M_month02 = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WMON_2, __cloc)); | |
304 | _M_month03 = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WMON_3, __cloc)); | |
305 | _M_month04 = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WMON_4, __cloc)); | |
306 | _M_month05 = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WMON_5, __cloc)); | |
307 | _M_month06 = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WMON_6, __cloc)); | |
308 | _M_month07 = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WMON_7, __cloc)); | |
309 | _M_month08 = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WMON_8, __cloc)); | |
310 | _M_month09 = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WMON_9, __cloc)); | |
311 | _M_month10 = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WMON_10, __cloc)); | |
312 | _M_month11 = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WMON_11, __cloc)); | |
313 | _M_month12 = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WMON_12, __cloc)); | |
314 | ||
315 | // Abbreviated month names, starting with "C"'s Jan. | |
316 | _M_month_a01 = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WABMON_1, __cloc)); | |
317 | _M_month_a02 = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WABMON_2, __cloc)); | |
318 | _M_month_a03 = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WABMON_3, __cloc)); | |
319 | _M_month_a04 = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WABMON_4, __cloc)); | |
320 | _M_month_a05 = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WABMON_5, __cloc)); | |
321 | _M_month_a06 = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WABMON_6, __cloc)); | |
322 | _M_month_a07 = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WABMON_7, __cloc)); | |
323 | _M_month_a08 = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WABMON_8, __cloc)); | |
324 | _M_month_a09 = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WABMON_9, __cloc)); | |
325 | _M_month_a10 = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WABMON_10, __cloc)); | |
326 | _M_month_a11 = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WABMON_11, __cloc)); | |
327 | _M_month_a12 = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WABMON_12, __cloc)); | |
1ab65677 BK |
328 | } |
329 | } | |
330 | #endif | |
331 | } |