OLD | NEW |
1 #include <time.h> | 1 #include <time.h> |
2 #include <stdio.h> | 2 #include <stdio.h> |
3 #include <langinfo.h> | 3 #include <langinfo.h> |
4 #include "atomic.h" | 4 #include "atomic.h" |
5 | 5 |
6 const char *__nl_langinfo(nl_item); | 6 const char* __nl_langinfo(nl_item); |
7 | 7 |
8 char *__asctime(const struct tm *restrict tm, char *restrict buf) | 8 char* __asctime(const struct tm* restrict tm, char* restrict buf) { |
9 { | 9 /* FIXME: change __nl_langinfo to __nl_langinfo_l with explicit C |
10 » /* FIXME: change __nl_langinfo to __nl_langinfo_l with explicit C | 10 * locale once we have locales */ |
11 » * locale once we have locales */ | 11 if (snprintf(buf, 26, "%.3s %.3s%3d %.2d:%.2d:%.2d %d\n", |
12 » if (snprintf(buf, 26, "%.3s %.3s%3d %.2d:%.2d:%.2d %d\n", | 12 __nl_langinfo(ABDAY_1 + tm->tm_wday), |
13 » » __nl_langinfo(ABDAY_1+tm->tm_wday), | 13 __nl_langinfo(ABMON_1 + tm->tm_mon), tm->tm_mday, tm->tm_hour, |
14 » » __nl_langinfo(ABMON_1+tm->tm_mon), | 14 tm->tm_min, tm->tm_sec, 1900 + tm->tm_year) >= 26) { |
15 » » tm->tm_mday, tm->tm_hour, | 15 /* ISO C requires us to use the above format string, |
16 » » tm->tm_min, tm->tm_sec, | 16 * even if it will not fit in the buffer. Thus asctime_r |
17 » » 1900 + tm->tm_year) >= 26) | 17 * is _supposed_ to crash if the fields in tm are too large. |
18 » { | 18 * We follow this behavior and crash "gracefully" to warn |
19 » » /* ISO C requires us to use the above format string, | 19 * application developers that they may not be so lucky |
20 » » * even if it will not fit in the buffer. Thus asctime_r | 20 * on other implementations (e.g. stack smashing..). |
21 » » * is _supposed_ to crash if the fields in tm are too large. | 21 */ |
22 » » * We follow this behavior and crash "gracefully" to warn | 22 a_crash(); |
23 » » * application developers that they may not be so lucky | 23 } |
24 » » * on other implementations (e.g. stack smashing..). | 24 return buf; |
25 » » */ | |
26 » » a_crash(); | |
27 » } | |
28 » return buf; | |
29 } | 25 } |
OLD | NEW |