1 #include "../test-tools.h"
7 static void yday2mday(struct tm
*time
) {
8 static int mtab
[12] = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
9 int i
, year
= 1900 + time
->tm_year
;
11 mtab
[1] = (!(year
% 4) && ((year
% 100) || !(year
%400))) ? 29 : 28;
12 time
->tm_mday
= time
->tm_yday
+ 1;
14 for (i
= 0; i
< 12; i
++) {
15 if (time
->tm_mday
> mtab
[i
]) {
16 time
->tm_mday
-= mtab
[i
];
25 /* Convert UTF-8 @string representation of ISO 8601 date to @time.
26 * XXX: Not all ISO formats are supported */
27 http_error
_server_datestring2tm(const char *string
, struct tm
*time
) {
30 if (!string
|| !time
) return HTTP_ERROR_SERVER
;
32 memset(time
, 0, sizeof(*time
));
34 if (sscanf(string
, "%d-%d-%d%n",
35 &time
->tm_year
, &time
->tm_mon
, &time
->tm_mday
, &tmp
) >= 3
36 && tmp
== strlen(string
)) {
38 time
->tm_year
-= 1900;
39 return HTTP_ERROR_SUCCESS
;
42 memset(time
, 0, sizeof(*time
));
44 if (sscanf(string
, "%d-%d%n",
45 &time
->tm_year
, &time
->tm_yday
, &tmp
) >= 2
46 && tmp
== strlen(string
)) {
48 time
->tm_year
-= 1900;
50 return HTTP_ERROR_SUCCESS
;
53 memset(time
, 0, sizeof(*time
));
57 return HTTP_ERROR_SERVER
;
62 if (sscanf(ptr
+ len
- 2, "%d%n", &time
->tm_mday
, &tmp
) < 1 || tmp
< 2) {
64 return HTTP_ERROR_SERVER
;
69 if (sscanf(ptr
+ len
- 4, "%d%n", &time
->tm_mon
, &tmp
) < 1 || tmp
< 2) {
71 return HTTP_ERROR_SERVER
;
76 if (sscanf(ptr
, "%d%n", &time
->tm_year
, &tmp
) < 1 || tmp
< len
- 4) {
78 return HTTP_ERROR_SERVER
;
83 time
->tm_year
-= 1900;
84 return HTTP_ERROR_SUCCESS
;