test: Add tests for isds_find_box_by_fulltext()
[libisds.git] / test / simline / win32.c
blob8867645929b23fddc08b29435f47512c739c61cc
1 #include "../test-tools.h"
2 #include <stdio.h>
3 #include <string.h>
4 #include "http.h"
5 #include "win32.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];
17 } else {
18 break;
22 time->tm_mon = 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) {
28 char *ptr;
29 int len, tmp;
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)) {
37 time->tm_mon--;
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)) {
47 time->tm_yday--;
48 time->tm_year -= 1900;
49 yday2mday(time);
50 return HTTP_ERROR_SUCCESS;
53 memset(time, 0, sizeof(*time));
54 len = strlen(string);
56 if (len < 4) {
57 return HTTP_ERROR_SERVER;
60 ptr = strdup(string);
62 if (sscanf(ptr + len - 2, "%d%n", &time->tm_mday, &tmp) < 1 || tmp < 2) {
63 free(ptr);
64 return HTTP_ERROR_SERVER;
67 ptr[len - 2] = '\0';
69 if (sscanf(ptr + len - 4, "%d%n", &time->tm_mon, &tmp) < 1 || tmp < 2) {
70 free(ptr);
71 return HTTP_ERROR_SERVER;
74 ptr[len - 4] = '\0';
76 if (sscanf(ptr, "%d%n", &time->tm_year, &tmp) < 1 || tmp < len - 4) {
77 free(ptr);
78 return HTTP_ERROR_SERVER;
81 free(ptr);
82 time->tm_mon--;
83 time->tm_year -= 1900;
84 return HTTP_ERROR_SUCCESS;