OLD | NEW |
1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "net/ftp/ftp_util.h" | 5 #include "net/ftp/ftp_util.h" |
6 | 6 |
7 #include <map> | 7 #include <map> |
8 #include <vector> | 8 #include <vector> |
9 | 9 |
10 #include "base/i18n/case_conversion.h" | 10 #include "base/i18n/case_conversion.h" |
(...skipping 156 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
167 // error. Just try another one. | 167 // error. Just try another one. |
168 if (U_FAILURE(status)) | 168 if (U_FAILURE(status)) |
169 continue; | 169 continue; |
170 | 170 |
171 int32_t months_count; | 171 int32_t months_count; |
172 const icu::UnicodeString* months = | 172 const icu::UnicodeString* months = |
173 format_symbols.getShortMonths(months_count); | 173 format_symbols.getShortMonths(months_count); |
174 | 174 |
175 for (int32_t month = 0; month < months_count; month++) { | 175 for (int32_t month = 0; month < months_count; month++) { |
176 base::string16 month_name(months[month].getBuffer(), | 176 base::string16 month_name(months[month].getBuffer(), |
177 static_cast<size_t>(months[month].length())); | 177 static_cast<size_t>(months[month].length())); |
178 | 178 |
179 // Ignore the case of the month names. The simplest way to handle that | 179 // Ignore the case of the month names. The simplest way to handle that |
180 // is to make everything lowercase. | 180 // is to make everything lowercase. |
181 month_name = base::i18n::ToLower(month_name); | 181 month_name = base::i18n::ToLower(month_name); |
182 | 182 |
183 map_[month_name] = month + 1; | 183 map_[month_name] = month + 1; |
184 | 184 |
185 // Sometimes ICU returns longer strings, but in FTP listings a shorter | 185 // Sometimes ICU returns longer strings, but in FTP listings a shorter |
186 // abbreviation is used (for example for the Russian locale). Make sure | 186 // abbreviation is used (for example for the Russian locale). Make sure |
187 // we always have a map entry for a three-letter abbreviation. | 187 // we always have a map entry for a three-letter abbreviation. |
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
221 int* number) { | 221 int* number) { |
222 return AbbreviatedMonthsMap::GetInstance()->GetMonthNumber(text, number); | 222 return AbbreviatedMonthsMap::GetInstance()->GetMonthNumber(text, number); |
223 } | 223 } |
224 | 224 |
225 // static | 225 // static |
226 bool FtpUtil::LsDateListingToTime(const base::string16& month, | 226 bool FtpUtil::LsDateListingToTime(const base::string16& month, |
227 const base::string16& day, | 227 const base::string16& day, |
228 const base::string16& rest, | 228 const base::string16& rest, |
229 const base::Time& current_time, | 229 const base::Time& current_time, |
230 base::Time* result) { | 230 base::Time* result) { |
231 base::Time::Exploded time_exploded = { 0 }; | 231 base::Time::Exploded time_exploded = {0}; |
232 | 232 |
233 if (!AbbreviatedMonthToNumber(month, &time_exploded.month)) { | 233 if (!AbbreviatedMonthToNumber(month, &time_exploded.month)) { |
234 // Work around garbage sent by some servers in the same column | 234 // Work around garbage sent by some servers in the same column |
235 // as the month. Take just last 3 characters of the string. | 235 // as the month. Take just last 3 characters of the string. |
236 if (month.length() < 3 || | 236 if (month.length() < 3 || |
237 !AbbreviatedMonthToNumber(month.substr(month.length() - 3), | 237 !AbbreviatedMonthToNumber(month.substr(month.length() - 3), |
238 &time_exploded.month)) { | 238 &time_exploded.month)) { |
239 return false; | 239 return false; |
240 } | 240 } |
241 } | 241 } |
(...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
285 | 285 |
286 // We don't know the time zone of the listing, so just use local time. | 286 // We don't know the time zone of the listing, so just use local time. |
287 *result = base::Time::FromLocalExploded(time_exploded); | 287 *result = base::Time::FromLocalExploded(time_exploded); |
288 return true; | 288 return true; |
289 } | 289 } |
290 | 290 |
291 // static | 291 // static |
292 bool FtpUtil::WindowsDateListingToTime(const base::string16& date, | 292 bool FtpUtil::WindowsDateListingToTime(const base::string16& date, |
293 const base::string16& time, | 293 const base::string16& time, |
294 base::Time* result) { | 294 base::Time* result) { |
295 base::Time::Exploded time_exploded = { 0 }; | 295 base::Time::Exploded time_exploded = {0}; |
296 | 296 |
297 // Date should be in format MM-DD-YY[YY]. | 297 // Date should be in format MM-DD-YY[YY]. |
298 std::vector<base::string16> date_parts; | 298 std::vector<base::string16> date_parts; |
299 base::SplitString(date, '-', &date_parts); | 299 base::SplitString(date, '-', &date_parts); |
300 if (date_parts.size() != 3) | 300 if (date_parts.size() != 3) |
301 return false; | 301 return false; |
302 if (!base::StringToInt(date_parts[0], &time_exploded.month)) | 302 if (!base::StringToInt(date_parts[0], &time_exploded.month)) |
303 return false; | 303 return false; |
304 if (!base::StringToInt(date_parts[1], &time_exploded.day_of_month)) | 304 if (!base::StringToInt(date_parts[1], &time_exploded.day_of_month)) |
305 return false; | 305 return false; |
(...skipping 58 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
364 while (!iter.end() && !u_isspace(iter.get())) | 364 while (!iter.end() && !u_isspace(iter.get())) |
365 iter.Advance(); | 365 iter.Advance(); |
366 } | 366 } |
367 | 367 |
368 base::string16 result(text.substr(iter.array_pos())); | 368 base::string16 result(text.substr(iter.array_pos())); |
369 base::TrimWhitespace(result, base::TRIM_ALL, &result); | 369 base::TrimWhitespace(result, base::TRIM_ALL, &result); |
370 return result; | 370 return result; |
371 } | 371 } |
372 | 372 |
373 } // namespace | 373 } // namespace |
OLD | NEW |