Lines Matching refs:str

15 static int parse_timezone(const char *str)
20 if ((*str != '+' && *str != '-') ||
21 !i_isdigit(str[1]) || !i_isdigit(str[2]) ||
22 !i_isdigit(str[3]) || !i_isdigit(str[4]))
25 offset = (str[1]-'0') * 10*60 + (str[2]-'0') * 60 +
26 (str[3]-'0') * 10 + (str[4]-'0');
27 return *str == '+' ? offset : -offset;
30 static const char *imap_parse_date_internal(const char *str, struct tm *tm)
34 if (str == NULL || *str == '\0')
42 if (str[0] == ' ') {
44 str++;
47 if (!(i_isdigit(str[0]) && (str[1] == '-' ||
48 (i_isdigit(str[1]) && str[2] == '-'))))
51 tm->tm_mday = (str[0]-'0');
52 if (str[1] == '-')
53 str += 2;
55 tm->tm_mday = (tm->tm_mday * 10) + (str[1]-'0');
56 str += 3;
61 if (strncasecmp(month_names[i], str, 3) == 0) {
66 if (i == 12 || str[3] != '-')
68 str += 4;
71 if (!i_isdigit(str[0]) || !i_isdigit(str[1]) ||
72 !i_isdigit(str[2]) || !i_isdigit(str[3]))
75 tm->tm_year = (str[0]-'0') * 1000 + (str[1]-'0') * 100 +
76 (str[2]-'0') * 10 + (str[3]-'0') - 1900;
78 str += 4;
79 return str;
108 bool imap_parse_date(const char *str, time_t *timestamp_r)
112 str = imap_parse_date_internal(str, &tm);
113 if (str == NULL || str[0] != '\0')
121 bool imap_parse_datetime(const char *str, time_t *timestamp_r,
126 str = imap_parse_date_internal(str, &tm);
127 if (str == NULL)
130 if (str[0] != ' ')
132 str++;
135 if (!i_isdigit(str[0]) || !i_isdigit(str[1]) || str[2] != ':')
137 tm.tm_hour = (str[0]-'0') * 10 + (str[1]-'0');
138 str += 3;
141 if (!i_isdigit(str[0]) || !i_isdigit(str[1]) || str[2] != ':')
143 tm.tm_min = (str[0]-'0') * 10 + (str[1]-'0');
144 str += 3;
147 if (!i_isdigit(str[0]) || !i_isdigit(str[1]) || str[2] != ' ')
149 tm.tm_sec = (str[0]-'0') * 10 + (str[1]-'0');
150 str += 3;
153 *timezone_offset_r = parse_timezone(str);