197403Sobrien// std::time_get, std::time_put implementation, GNU version -*- C++ -*-
297403Sobrien
3169691Skan// Copyright (C) 2001, 2002, 2003, 2004, 2005 Free Software Foundation, Inc.
497403Sobrien//
597403Sobrien// This file is part of the GNU ISO C++ Library.  This library is free
697403Sobrien// software; you can redistribute it and/or modify it under the
797403Sobrien// terms of the GNU General Public License as published by the
897403Sobrien// Free Software Foundation; either version 2, or (at your option)
997403Sobrien// any later version.
1097403Sobrien
1197403Sobrien// This library is distributed in the hope that it will be useful,
1297403Sobrien// but WITHOUT ANY WARRANTY; without even the implied warranty of
1397403Sobrien// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
1497403Sobrien// GNU General Public License for more details.
1597403Sobrien
1697403Sobrien// You should have received a copy of the GNU General Public License along
1797403Sobrien// with this library; see the file COPYING.  If not, write to the Free
18169691Skan// Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
1997403Sobrien// USA.
2097403Sobrien
2197403Sobrien// As a special exception, you may use this file as part of a free software
2297403Sobrien// library without restriction.  Specifically, if other files instantiate
2397403Sobrien// templates or use macros or inline functions from this file, or you compile
2497403Sobrien// this file and link it with other files to produce an executable, this
2597403Sobrien// file does not by itself cause the resulting executable to be covered by
2697403Sobrien// the GNU General Public License.  This exception does not however
2797403Sobrien// invalidate any other reasons why the executable file might be covered by
2897403Sobrien// the GNU General Public License.
2997403Sobrien
3097403Sobrien//
3197403Sobrien// ISO C++ 14882: 22.2.5.1.2 - time_get virtual functions
3297403Sobrien// ISO C++ 14882: 22.2.5.3.2 - time_put virtual functions
3397403Sobrien//
3497403Sobrien
3597403Sobrien// Written by Benjamin Kosnik <bkoz@redhat.com>
3697403Sobrien
3797403Sobrien#include <locale>
38117397Skan#include <bits/c++locale_internal.h>
3997403Sobrien
40169691Skan_GLIBCXX_BEGIN_NAMESPACE(std)
41169691Skan
4297403Sobrien  template<>
4397403Sobrien    void
4497403Sobrien    __timepunct<char>::
4597403Sobrien    _M_put(char* __s, size_t __maxlen, const char* __format,
4697403Sobrien	   const tm* __tm) const
4797403Sobrien    {
4897403Sobrien#if __GLIBC__ > 2 || (__GLIBC__ == 2 && __GLIBC_MINOR__ > 2)
49146897Skan      const size_t __len = __strftime_l(__s, __maxlen, __format, __tm,
50146897Skan					_M_c_locale_timepunct);
5197403Sobrien#else
52102782Skan      char* __old = strdup(setlocale(LC_ALL, NULL));
53102782Skan      setlocale(LC_ALL, _M_name_timepunct);
54146897Skan      const size_t __len = strftime(__s, __maxlen, __format, __tm);
5597403Sobrien      setlocale(LC_ALL, __old);
56102782Skan      free(__old);
5797403Sobrien#endif
58146897Skan      // Make sure __s is null terminated.
59146897Skan      if (__len == 0)
60146897Skan	__s[0] = '\0';
6197403Sobrien    }
6297403Sobrien
6397403Sobrien  template<>
6497403Sobrien    void
6597403Sobrien    __timepunct<char>::_M_initialize_timepunct(__c_locale __cloc)
6697403Sobrien    {
67132720Skan      if (!_M_data)
68132720Skan	_M_data = new __timepunct_cache<char>;
69132720Skan
70107606Sobrien      if (!__cloc)
7197403Sobrien	{
7297403Sobrien	  // "C" locale
73132720Skan	  _M_c_locale_timepunct = _S_get_c_locale();
74103447Skan
75132720Skan	  _M_data->_M_date_format = "%m/%d/%y";
76132720Skan	  _M_data->_M_date_era_format = "%m/%d/%y";
77132720Skan	  _M_data->_M_time_format = "%H:%M:%S";
78132720Skan	  _M_data->_M_time_era_format = "%H:%M:%S";
79132720Skan	  _M_data->_M_date_time_format = "";
80132720Skan	  _M_data->_M_date_time_era_format = "";
81132720Skan	  _M_data->_M_am = "AM";
82132720Skan	  _M_data->_M_pm = "PM";
83132720Skan	  _M_data->_M_am_pm_format = "";
8497403Sobrien
8597403Sobrien	  // Day names, starting with "C"'s Sunday.
86132720Skan	  _M_data->_M_day1 = "Sunday";
87132720Skan	  _M_data->_M_day2 = "Monday";
88132720Skan	  _M_data->_M_day3 = "Tuesday";
89132720Skan	  _M_data->_M_day4 = "Wednesday";
90132720Skan	  _M_data->_M_day5 = "Thursday";
91132720Skan	  _M_data->_M_day6 = "Friday";
92132720Skan	  _M_data->_M_day7 = "Saturday";
9397403Sobrien
9497403Sobrien	  // Abbreviated day names, starting with "C"'s Sun.
95132720Skan	  _M_data->_M_aday1 = "Sun";
96132720Skan	  _M_data->_M_aday2 = "Mon";
97132720Skan	  _M_data->_M_aday3 = "Tue";
98132720Skan	  _M_data->_M_aday4 = "Wed";
99132720Skan	  _M_data->_M_aday5 = "Thu";
100132720Skan	  _M_data->_M_aday6 = "Fri";
101132720Skan	  _M_data->_M_aday7 = "Sat";
10297403Sobrien
10397403Sobrien	  // Month names, starting with "C"'s January.
104132720Skan	  _M_data->_M_month01 = "January";
105132720Skan	  _M_data->_M_month02 = "February";
106132720Skan	  _M_data->_M_month03 = "March";
107132720Skan	  _M_data->_M_month04 = "April";
108132720Skan	  _M_data->_M_month05 = "May";
109132720Skan	  _M_data->_M_month06 = "June";
110132720Skan	  _M_data->_M_month07 = "July";
111132720Skan	  _M_data->_M_month08 = "August";
112132720Skan	  _M_data->_M_month09 = "September";
113132720Skan	  _M_data->_M_month10 = "October";
114132720Skan	  _M_data->_M_month11 = "November";
115132720Skan	  _M_data->_M_month12 = "December";
11697403Sobrien
11797403Sobrien	  // Abbreviated month names, starting with "C"'s Jan.
118132720Skan	  _M_data->_M_amonth01 = "Jan";
119132720Skan	  _M_data->_M_amonth02 = "Feb";
120132720Skan	  _M_data->_M_amonth03 = "Mar";
121132720Skan	  _M_data->_M_amonth04 = "Apr";
122132720Skan	  _M_data->_M_amonth05 = "May";
123132720Skan	  _M_data->_M_amonth06 = "Jun";
124132720Skan	  _M_data->_M_amonth07 = "Jul";
125132720Skan	  _M_data->_M_amonth08 = "Aug";
126132720Skan	  _M_data->_M_amonth09 = "Sep";
127132720Skan	  _M_data->_M_amonth10 = "Oct";
128132720Skan	  _M_data->_M_amonth11 = "Nov";
129132720Skan	  _M_data->_M_amonth12 = "Dec";
13097403Sobrien	}
13197403Sobrien      else
13297403Sobrien	{
13397403Sobrien	  _M_c_locale_timepunct = _S_clone_c_locale(__cloc);
13497403Sobrien
135132720Skan	  _M_data->_M_date_format = __nl_langinfo_l(D_FMT, __cloc);
136132720Skan	  _M_data->_M_date_era_format = __nl_langinfo_l(ERA_D_FMT, __cloc);
137132720Skan	  _M_data->_M_time_format = __nl_langinfo_l(T_FMT, __cloc);
138132720Skan	  _M_data->_M_time_era_format = __nl_langinfo_l(ERA_T_FMT, __cloc);
139132720Skan	  _M_data->_M_date_time_format = __nl_langinfo_l(D_T_FMT, __cloc);
140169691Skan	  _M_data->_M_date_time_era_format = __nl_langinfo_l(ERA_D_T_FMT,
141169691Skan							     __cloc);
142132720Skan	  _M_data->_M_am = __nl_langinfo_l(AM_STR, __cloc);
143132720Skan	  _M_data->_M_pm = __nl_langinfo_l(PM_STR, __cloc);
144132720Skan	  _M_data->_M_am_pm_format = __nl_langinfo_l(T_FMT_AMPM, __cloc);
14597403Sobrien
14697403Sobrien	  // Day names, starting with "C"'s Sunday.
147132720Skan	  _M_data->_M_day1 = __nl_langinfo_l(DAY_1, __cloc);
148132720Skan	  _M_data->_M_day2 = __nl_langinfo_l(DAY_2, __cloc);
149132720Skan	  _M_data->_M_day3 = __nl_langinfo_l(DAY_3, __cloc);
150132720Skan	  _M_data->_M_day4 = __nl_langinfo_l(DAY_4, __cloc);
151132720Skan	  _M_data->_M_day5 = __nl_langinfo_l(DAY_5, __cloc);
152132720Skan	  _M_data->_M_day6 = __nl_langinfo_l(DAY_6, __cloc);
153132720Skan	  _M_data->_M_day7 = __nl_langinfo_l(DAY_7, __cloc);
15497403Sobrien
15597403Sobrien	  // Abbreviated day names, starting with "C"'s Sun.
156132720Skan	  _M_data->_M_aday1 = __nl_langinfo_l(ABDAY_1, __cloc);
157132720Skan	  _M_data->_M_aday2 = __nl_langinfo_l(ABDAY_2, __cloc);
158132720Skan	  _M_data->_M_aday3 = __nl_langinfo_l(ABDAY_3, __cloc);
159132720Skan	  _M_data->_M_aday4 = __nl_langinfo_l(ABDAY_4, __cloc);
160132720Skan	  _M_data->_M_aday5 = __nl_langinfo_l(ABDAY_5, __cloc);
161132720Skan	  _M_data->_M_aday6 = __nl_langinfo_l(ABDAY_6, __cloc);
162132720Skan	  _M_data->_M_aday7 = __nl_langinfo_l(ABDAY_7, __cloc);
16397403Sobrien
16497403Sobrien	  // Month names, starting with "C"'s January.
165132720Skan	  _M_data->_M_month01 = __nl_langinfo_l(MON_1, __cloc);
166132720Skan	  _M_data->_M_month02 = __nl_langinfo_l(MON_2, __cloc);
167132720Skan	  _M_data->_M_month03 = __nl_langinfo_l(MON_3, __cloc);
168132720Skan	  _M_data->_M_month04 = __nl_langinfo_l(MON_4, __cloc);
169132720Skan	  _M_data->_M_month05 = __nl_langinfo_l(MON_5, __cloc);
170132720Skan	  _M_data->_M_month06 = __nl_langinfo_l(MON_6, __cloc);
171132720Skan	  _M_data->_M_month07 = __nl_langinfo_l(MON_7, __cloc);
172132720Skan	  _M_data->_M_month08 = __nl_langinfo_l(MON_8, __cloc);
173132720Skan	  _M_data->_M_month09 = __nl_langinfo_l(MON_9, __cloc);
174132720Skan	  _M_data->_M_month10 = __nl_langinfo_l(MON_10, __cloc);
175132720Skan	  _M_data->_M_month11 = __nl_langinfo_l(MON_11, __cloc);
176132720Skan	  _M_data->_M_month12 = __nl_langinfo_l(MON_12, __cloc);
17797403Sobrien
17897403Sobrien	  // Abbreviated month names, starting with "C"'s Jan.
179132720Skan	  _M_data->_M_amonth01 = __nl_langinfo_l(ABMON_1, __cloc);
180132720Skan	  _M_data->_M_amonth02 = __nl_langinfo_l(ABMON_2, __cloc);
181132720Skan	  _M_data->_M_amonth03 = __nl_langinfo_l(ABMON_3, __cloc);
182132720Skan	  _M_data->_M_amonth04 = __nl_langinfo_l(ABMON_4, __cloc);
183132720Skan	  _M_data->_M_amonth05 = __nl_langinfo_l(ABMON_5, __cloc);
184132720Skan	  _M_data->_M_amonth06 = __nl_langinfo_l(ABMON_6, __cloc);
185132720Skan	  _M_data->_M_amonth07 = __nl_langinfo_l(ABMON_7, __cloc);
186132720Skan	  _M_data->_M_amonth08 = __nl_langinfo_l(ABMON_8, __cloc);
187132720Skan	  _M_data->_M_amonth09 = __nl_langinfo_l(ABMON_9, __cloc);
188132720Skan	  _M_data->_M_amonth10 = __nl_langinfo_l(ABMON_10, __cloc);
189132720Skan	  _M_data->_M_amonth11 = __nl_langinfo_l(ABMON_11, __cloc);
190132720Skan	  _M_data->_M_amonth12 = __nl_langinfo_l(ABMON_12, __cloc);
19197403Sobrien	}
19297403Sobrien    }
19397403Sobrien
194132720Skan#ifdef _GLIBCXX_USE_WCHAR_T
19597403Sobrien  template<>
19697403Sobrien    void
19797403Sobrien    __timepunct<wchar_t>::
19897403Sobrien    _M_put(wchar_t* __s, size_t __maxlen, const wchar_t* __format,
19997403Sobrien	   const tm* __tm) const
20097403Sobrien    {
20197403Sobrien#if __GLIBC__ > 2 || (__GLIBC__ == 2 && __GLIBC_MINOR__ > 2)
202146897Skan      const size_t __len = __wcsftime_l(__s, __maxlen, __format, __tm,
203146897Skan					_M_c_locale_timepunct);
20497403Sobrien#else
205102782Skan      char* __old = strdup(setlocale(LC_ALL, NULL));
206102782Skan      setlocale(LC_ALL, _M_name_timepunct);
207146897Skan      const size_t __len = wcsftime(__s, __maxlen, __format, __tm);
20897403Sobrien      setlocale(LC_ALL, __old);
209102782Skan      free(__old);
21097403Sobrien#endif
211146897Skan      // Make sure __s is null terminated.
212146897Skan      if (__len == 0)
213146897Skan	__s[0] = L'\0';
21497403Sobrien    }
21597403Sobrien
21697403Sobrien  template<>
21797403Sobrien    void
21897403Sobrien    __timepunct<wchar_t>::_M_initialize_timepunct(__c_locale __cloc)
21997403Sobrien    {
220132720Skan      if (!_M_data)
221132720Skan	_M_data = new __timepunct_cache<wchar_t>;
222132720Skan
223107606Sobrien      if (!__cloc)
22497403Sobrien	{
22597403Sobrien	  // "C" locale
226132720Skan	  _M_c_locale_timepunct = _S_get_c_locale();
227103447Skan
228132720Skan	  _M_data->_M_date_format = L"%m/%d/%y";
229132720Skan	  _M_data->_M_date_era_format = L"%m/%d/%y";
230132720Skan	  _M_data->_M_time_format = L"%H:%M:%S";
231132720Skan	  _M_data->_M_time_era_format = L"%H:%M:%S";
232132720Skan	  _M_data->_M_date_time_format = L"";
233132720Skan	  _M_data->_M_date_time_era_format = L"";
234132720Skan	  _M_data->_M_am = L"AM";
235132720Skan	  _M_data->_M_pm = L"PM";
236132720Skan	  _M_data->_M_am_pm_format = L"";
23797403Sobrien
23897403Sobrien	  // Day names, starting with "C"'s Sunday.
239132720Skan	  _M_data->_M_day1 = L"Sunday";
240132720Skan	  _M_data->_M_day2 = L"Monday";
241132720Skan	  _M_data->_M_day3 = L"Tuesday";
242132720Skan	  _M_data->_M_day4 = L"Wednesday";
243132720Skan	  _M_data->_M_day5 = L"Thursday";
244132720Skan	  _M_data->_M_day6 = L"Friday";
245132720Skan	  _M_data->_M_day7 = L"Saturday";
24697403Sobrien
24797403Sobrien	  // Abbreviated day names, starting with "C"'s Sun.
248132720Skan	  _M_data->_M_aday1 = L"Sun";
249132720Skan	  _M_data->_M_aday2 = L"Mon";
250132720Skan	  _M_data->_M_aday3 = L"Tue";
251132720Skan	  _M_data->_M_aday4 = L"Wed";
252132720Skan	  _M_data->_M_aday5 = L"Thu";
253132720Skan	  _M_data->_M_aday6 = L"Fri";
254132720Skan	  _M_data->_M_aday7 = L"Sat";
25597403Sobrien
25697403Sobrien	  // Month names, starting with "C"'s January.
257132720Skan	  _M_data->_M_month01 = L"January";
258132720Skan	  _M_data->_M_month02 = L"February";
259132720Skan	  _M_data->_M_month03 = L"March";
260132720Skan	  _M_data->_M_month04 = L"April";
261132720Skan	  _M_data->_M_month05 = L"May";
262132720Skan	  _M_data->_M_month06 = L"June";
263132720Skan	  _M_data->_M_month07 = L"July";
264132720Skan	  _M_data->_M_month08 = L"August";
265132720Skan	  _M_data->_M_month09 = L"September";
266132720Skan	  _M_data->_M_month10 = L"October";
267132720Skan	  _M_data->_M_month11 = L"November";
268132720Skan	  _M_data->_M_month12 = L"December";
26997403Sobrien
27097403Sobrien	  // Abbreviated month names, starting with "C"'s Jan.
271132720Skan	  _M_data->_M_amonth01 = L"Jan";
272132720Skan	  _M_data->_M_amonth02 = L"Feb";
273132720Skan	  _M_data->_M_amonth03 = L"Mar";
274132720Skan	  _M_data->_M_amonth04 = L"Apr";
275132720Skan	  _M_data->_M_amonth05 = L"May";
276132720Skan	  _M_data->_M_amonth06 = L"Jun";
277132720Skan	  _M_data->_M_amonth07 = L"Jul";
278132720Skan	  _M_data->_M_amonth08 = L"Aug";
279132720Skan	  _M_data->_M_amonth09 = L"Sep";
280132720Skan	  _M_data->_M_amonth10 = L"Oct";
281132720Skan	  _M_data->_M_amonth11 = L"Nov";
282132720Skan	  _M_data->_M_amonth12 = L"Dec";
28397403Sobrien	}
28497403Sobrien      else
28597403Sobrien	{
28697403Sobrien	  _M_c_locale_timepunct = _S_clone_c_locale(__cloc);
28797403Sobrien
288169691Skan	  union { char *__s; wchar_t *__w; } __u;
28997403Sobrien
290169691Skan	  __u.__s = __nl_langinfo_l(_NL_WD_FMT, __cloc);
291169691Skan	  _M_data->_M_date_format = __u.__w;
292169691Skan	  __u.__s = __nl_langinfo_l(_NL_WERA_D_FMT, __cloc);
293169691Skan	  _M_data->_M_date_era_format = __u.__w;
294169691Skan	  __u.__s = __nl_langinfo_l(_NL_WT_FMT, __cloc);
295169691Skan	  _M_data->_M_time_format = __u.__w;
296169691Skan	  __u.__s = __nl_langinfo_l(_NL_WERA_T_FMT, __cloc);
297169691Skan	  _M_data->_M_time_era_format = __u.__w;
298169691Skan	  __u.__s = __nl_langinfo_l(_NL_WD_T_FMT, __cloc);
299169691Skan	  _M_data->_M_date_time_format = __u.__w;
300169691Skan	  __u.__s = __nl_langinfo_l(_NL_WERA_D_T_FMT, __cloc);
301169691Skan	  _M_data->_M_date_time_era_format = __u.__w;
302169691Skan	  __u.__s = __nl_langinfo_l(_NL_WAM_STR, __cloc);
303169691Skan	  _M_data->_M_am = __u.__w;
304169691Skan	  __u.__s = __nl_langinfo_l(_NL_WPM_STR, __cloc);
305169691Skan	  _M_data->_M_pm = __u.__w;
306169691Skan	  __u.__s = __nl_langinfo_l(_NL_WT_FMT_AMPM, __cloc);
307169691Skan	  _M_data->_M_am_pm_format = __u.__w;
308169691Skan
30997403Sobrien	  // Day names, starting with "C"'s Sunday.
310169691Skan	  __u.__s = __nl_langinfo_l(_NL_WDAY_1, __cloc);
311169691Skan	  _M_data->_M_day1 = __u.__w;
312169691Skan	  __u.__s = __nl_langinfo_l(_NL_WDAY_2, __cloc);
313169691Skan	  _M_data->_M_day2 = __u.__w;
314169691Skan	  __u.__s = __nl_langinfo_l(_NL_WDAY_3, __cloc);
315169691Skan	  _M_data->_M_day3 = __u.__w;
316169691Skan	  __u.__s = __nl_langinfo_l(_NL_WDAY_4, __cloc);
317169691Skan	  _M_data->_M_day4 = __u.__w;
318169691Skan	  __u.__s = __nl_langinfo_l(_NL_WDAY_5, __cloc);
319169691Skan	  _M_data->_M_day5 = __u.__w;
320169691Skan	  __u.__s = __nl_langinfo_l(_NL_WDAY_6, __cloc);
321169691Skan	  _M_data->_M_day6 = __u.__w;
322169691Skan	  __u.__s = __nl_langinfo_l(_NL_WDAY_7, __cloc);
323169691Skan	  _M_data->_M_day7 = __u.__w;
32497403Sobrien
32597403Sobrien	  // Abbreviated day names, starting with "C"'s Sun.
326169691Skan	  __u.__s = __nl_langinfo_l(_NL_WABDAY_1, __cloc);
327169691Skan	  _M_data->_M_aday1 = __u.__w;
328169691Skan	  __u.__s = __nl_langinfo_l(_NL_WABDAY_2, __cloc);
329169691Skan	  _M_data->_M_aday2 = __u.__w;
330169691Skan	  __u.__s = __nl_langinfo_l(_NL_WABDAY_3, __cloc);
331169691Skan	  _M_data->_M_aday3 = __u.__w;
332169691Skan	  __u.__s = __nl_langinfo_l(_NL_WABDAY_4, __cloc);
333169691Skan	  _M_data->_M_aday4 = __u.__w;
334169691Skan	  __u.__s = __nl_langinfo_l(_NL_WABDAY_5, __cloc);
335169691Skan	  _M_data->_M_aday5 = __u.__w;
336169691Skan	  __u.__s = __nl_langinfo_l(_NL_WABDAY_6, __cloc);
337169691Skan	  _M_data->_M_aday6 = __u.__w;
338169691Skan	  __u.__s = __nl_langinfo_l(_NL_WABDAY_7, __cloc);
339169691Skan	  _M_data->_M_aday7 = __u.__w;
34097403Sobrien
34197403Sobrien	  // Month names, starting with "C"'s January.
342169691Skan	  __u.__s = __nl_langinfo_l(_NL_WMON_1, __cloc);
343169691Skan	  _M_data->_M_month01 = __u.__w;
344169691Skan	  __u.__s = __nl_langinfo_l(_NL_WMON_2, __cloc);
345169691Skan	  _M_data->_M_month02 = __u.__w;
346169691Skan	  __u.__s = __nl_langinfo_l(_NL_WMON_3, __cloc);
347169691Skan	  _M_data->_M_month03 = __u.__w;
348169691Skan	  __u.__s = __nl_langinfo_l(_NL_WMON_4, __cloc);
349169691Skan	  _M_data->_M_month04 = __u.__w;
350169691Skan	  __u.__s = __nl_langinfo_l(_NL_WMON_5, __cloc);
351169691Skan	  _M_data->_M_month05 = __u.__w;
352169691Skan	  __u.__s = __nl_langinfo_l(_NL_WMON_6, __cloc);
353169691Skan	  _M_data->_M_month06 = __u.__w;
354169691Skan	  __u.__s = __nl_langinfo_l(_NL_WMON_7, __cloc);
355169691Skan	  _M_data->_M_month07 = __u.__w;
356169691Skan	  __u.__s = __nl_langinfo_l(_NL_WMON_8, __cloc);
357169691Skan	  _M_data->_M_month08 = __u.__w;
358169691Skan	  __u.__s = __nl_langinfo_l(_NL_WMON_9, __cloc);
359169691Skan	  _M_data->_M_month09 = __u.__w;
360169691Skan	  __u.__s = __nl_langinfo_l(_NL_WMON_10, __cloc);
361169691Skan	  _M_data->_M_month10 = __u.__w;
362169691Skan	  __u.__s = __nl_langinfo_l(_NL_WMON_11, __cloc);
363169691Skan	  _M_data->_M_month11 = __u.__w;
364169691Skan	  __u.__s = __nl_langinfo_l(_NL_WMON_12, __cloc);
365169691Skan	  _M_data->_M_month12 = __u.__w;
36697403Sobrien
36797403Sobrien	  // Abbreviated month names, starting with "C"'s Jan.
368169691Skan	  __u.__s = __nl_langinfo_l(_NL_WABMON_1, __cloc);
369169691Skan	  _M_data->_M_amonth01 = __u.__w;
370169691Skan	  __u.__s = __nl_langinfo_l(_NL_WABMON_2, __cloc);
371169691Skan	  _M_data->_M_amonth02 = __u.__w;
372169691Skan	  __u.__s = __nl_langinfo_l(_NL_WABMON_3, __cloc);
373169691Skan	  _M_data->_M_amonth03 = __u.__w;
374169691Skan	  __u.__s = __nl_langinfo_l(_NL_WABMON_4, __cloc);
375169691Skan	  _M_data->_M_amonth04 = __u.__w;
376169691Skan	  __u.__s = __nl_langinfo_l(_NL_WABMON_5, __cloc);
377169691Skan	  _M_data->_M_amonth05 = __u.__w;
378169691Skan	  __u.__s = __nl_langinfo_l(_NL_WABMON_6, __cloc);
379169691Skan	  _M_data->_M_amonth06 = __u.__w;
380169691Skan	  __u.__s = __nl_langinfo_l(_NL_WABMON_7, __cloc);
381169691Skan	  _M_data->_M_amonth07 = __u.__w;
382169691Skan	  __u.__s = __nl_langinfo_l(_NL_WABMON_8, __cloc);
383169691Skan	  _M_data->_M_amonth08 = __u.__w;
384169691Skan	  __u.__s = __nl_langinfo_l(_NL_WABMON_9, __cloc);
385169691Skan	  _M_data->_M_amonth09 = __u.__w;
386169691Skan	  __u.__s = __nl_langinfo_l(_NL_WABMON_10, __cloc);
387169691Skan	  _M_data->_M_amonth10 = __u.__w;
388169691Skan	  __u.__s = __nl_langinfo_l(_NL_WABMON_11, __cloc);
389169691Skan	  _M_data->_M_amonth11 = __u.__w;
390169691Skan	  __u.__s = __nl_langinfo_l(_NL_WABMON_12, __cloc);
391169691Skan	  _M_data->_M_amonth12 = __u.__w;
39297403Sobrien	}
39397403Sobrien    }
39497403Sobrien#endif
395169691Skan
396169691Skan_GLIBCXX_END_NAMESPACE
397