Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(626)

Side by Side Diff: net/ftp/ftp_directory_listing_parser_ls.cc

Issue 1215933004: New new versions of Starts/EndsWith and SplitString in net (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@starts_with
Patch Set: Created 5 years, 5 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « net/filter/filter.cc ('k') | net/ftp/ftp_directory_listing_parser_netware.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 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_directory_listing_parser_ls.h" 5 #include "net/ftp/ftp_directory_listing_parser_ls.h"
6 6
7 #include <vector> 7 #include <vector>
8 8
9 #include "base/strings/string_number_conversions.h" 9 #include "base/strings/string_number_conversions.h"
10 #include "base/strings/string_split.h" 10 #include "base/strings/string_split.h"
11 #include "base/strings/string_util.h" 11 #include "base/strings/string_util.h"
12 #include "base/strings/utf_string_conversions.h" 12 #include "base/strings/utf_string_conversions.h"
13 #include "base/time/time.h" 13 #include "base/time/time.h"
14 #include "net/ftp/ftp_directory_listing_parser.h" 14 #include "net/ftp/ftp_directory_listing_parser.h"
15 #include "net/ftp/ftp_util.h" 15 #include "net/ftp/ftp_util.h"
16 16
17 namespace net { 17 namespace net {
18 18
19 namespace { 19 namespace {
20 20
21 bool TwoColumnDateListingToTime(const base::string16& date, 21 bool TwoColumnDateListingToTime(const base::string16& date,
22 const base::string16& time, 22 const base::string16& time,
23 base::Time* result) { 23 base::Time* result) {
24 base::Time::Exploded time_exploded = { 0 }; 24 base::Time::Exploded time_exploded = { 0 };
25 25
26 // Date should be in format YYYY-MM-DD. 26 // Date should be in format YYYY-MM-DD.
27 std::vector<base::string16> date_parts; 27 std::vector<base::string16> date_parts =
28 base::SplitString(date, '-', &date_parts); 28 base::SplitString(date, base::ASCIIToUTF16("-"), base::TRIM_WHITESPACE,
29 base::SPLIT_WANT_ALL);
29 if (date_parts.size() != 3) 30 if (date_parts.size() != 3)
30 return false; 31 return false;
31 if (!base::StringToInt(date_parts[0], &time_exploded.year)) 32 if (!base::StringToInt(date_parts[0], &time_exploded.year))
32 return false; 33 return false;
33 if (!base::StringToInt(date_parts[1], &time_exploded.month)) 34 if (!base::StringToInt(date_parts[1], &time_exploded.month))
34 return false; 35 return false;
35 if (!base::StringToInt(date_parts[2], &time_exploded.day_of_month)) 36 if (!base::StringToInt(date_parts[2], &time_exploded.day_of_month))
36 return false; 37 return false;
37 38
38 // Time should be in format HH:MM 39 // Time should be in format HH:MM
39 if (time.length() != 5) 40 if (time.length() != 5)
40 return false; 41 return false;
41 42
42 std::vector<base::string16> time_parts; 43 std::vector<base::string16> time_parts =
43 base::SplitString(time, ':', &time_parts); 44 base::SplitString(time, base::ASCIIToUTF16(":"), base::TRIM_WHITESPACE,
45 base::SPLIT_WANT_ALL);
44 if (time_parts.size() != 2) 46 if (time_parts.size() != 2)
45 return false; 47 return false;
46 if (!base::StringToInt(time_parts[0], &time_exploded.hour)) 48 if (!base::StringToInt(time_parts[0], &time_exploded.hour))
47 return false; 49 return false;
48 if (!base::StringToInt(time_parts[1], &time_exploded.minute)) 50 if (!base::StringToInt(time_parts[1], &time_exploded.minute))
49 return false; 51 return false;
50 if (!time_exploded.HasValidValues()) 52 if (!time_exploded.HasValidValues())
51 return false; 53 return false;
52 54
53 // We don't know the time zone of the server, so just use local time. 55 // We don't know the time zone of the server, so just use local time.
(...skipping 67 matching lines...) Expand 10 before | Expand all | Expand 10 after
121 const base::Time& current_time, 123 const base::Time& current_time,
122 std::vector<FtpDirectoryListingEntry>* entries) { 124 std::vector<FtpDirectoryListingEntry>* entries) {
123 // True after we have received a "total n" listing header, where n is an 125 // True after we have received a "total n" listing header, where n is an
124 // integer. Only one such header is allowed per listing. 126 // integer. Only one such header is allowed per listing.
125 bool received_total_line = false; 127 bool received_total_line = false;
126 128
127 for (size_t i = 0; i < lines.size(); i++) { 129 for (size_t i = 0; i < lines.size(); i++) {
128 if (lines[i].empty()) 130 if (lines[i].empty())
129 continue; 131 continue;
130 132
131 std::vector<base::string16> columns; 133 std::vector<base::string16> columns = base::SplitString(
132 base::SplitString(base::CollapseWhitespace(lines[i], false), ' ', &columns); 134 base::CollapseWhitespace(lines[i], false), base::ASCIIToUTF16(" "),
135 base::TRIM_WHITESPACE, base::SPLIT_WANT_ALL);
133 136
134 // Some FTP servers put a "total n" line at the beginning of the listing 137 // Some FTP servers put a "total n" line at the beginning of the listing
135 // (n is an integer). Allow such a line, but only once, and only if it's 138 // (n is an integer). Allow such a line, but only once, and only if it's
136 // the first non-empty line. Do not match the word exactly, because it may 139 // the first non-empty line. Do not match the word exactly, because it may
137 // be in different languages (at least English and German have been seen 140 // be in different languages (at least English and German have been seen
138 // in the field). 141 // in the field).
139 if (columns.size() == 2 && !received_total_line) { 142 if (columns.size() == 2 && !received_total_line) {
140 received_total_line = true; 143 received_total_line = true;
141 144
142 int64 total_number; 145 int64 total_number;
(...skipping 76 matching lines...) Expand 10 before | Expand all | Expand 10 after
219 entry.name = entry.name.substr(0, pos); 222 entry.name = entry.name.substr(0, pos);
220 } 223 }
221 224
222 entries->push_back(entry); 225 entries->push_back(entry);
223 } 226 }
224 227
225 return true; 228 return true;
226 } 229 }
227 230
228 } // namespace net 231 } // namespace net
OLDNEW
« no previous file with comments | « net/filter/filter.cc ('k') | net/ftp/ftp_directory_listing_parser_netware.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698