7 while(*q != '\0' && *q != ' ' && *q != '\t' && *q != '\r' && *q != '\n')
15 while(*q == ' ' || *q == '\t' || *q == '\r' || *q == '\n')
20 static char* months[] = {
21 "jan", "feb", "mar", "apr",
22 "may", "jun", "jul", "aug",
23 "sep", "oct", "nov", "dec"
27 strtotm(char *p, Tm *t)
35 memset(&tm, 0, sizeof(tm));
41 memcpy(tm.zone, "GMT", 3);
42 for(p = skipwhite(p); *p; p = skipwhite(q)){
45 /* look for time in hh:mm[:ss] */
46 if(r = memchr(p, ':', q - p)){
47 tm.hour = strtol(p, 0, 10);
48 tm.min = strtol(r + 1, 0, 10);
49 if(r = memchr(r + 1, ':', q - (r + 1)))
50 tm.sec = strtol(r + 1, 0, 10);
57 for(j = 0; j < 12; j++)
58 if(cistrncmp(p, months[j], 3) == 0){
65 /* look for time zone [A-Z][A-Z]T */
67 if(p[0] >= 'A' && p[0] <= 'Z')
68 if(p[1] >= 'A' && p[1] <= 'Z')
70 strecpy(tm.zone, tm.zone + 4, p);
74 if(p[0] == '+'||p[0] == '-')
75 if(q - p == 5 && strspn(p + 1, "0123456789") == 4){
76 delta = (((p[1] - '0')*10 + p[2] - '0')*60 + (p[3] - '0')*10 + p[4] - '0')*60;
81 if(strspn(p, "0123456789") == q - p){
82 j = strtol(p, nil, 10);
89 //eprint("strtotm: garbage %.*s\n", utfnlen(p, q - p), p);
91 if(tm.mon < 0 || tm.year < 0
92 || tm.hour < 0 || tm.min < 0
96 *t = *localtime(tm2sec(&tm) - delta);