| OLD | NEW |
| 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_vms.h" | 5 #include "net/ftp/ftp_directory_listing_parser_vms.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" |
| (...skipping 188 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 199 // The first non-empty line is the listing header. It often | 199 // The first non-empty line is the listing header. It often |
| 200 // starts with "Directory ", but not always. We set a flag after | 200 // starts with "Directory ", but not always. We set a flag after |
| 201 // seing the header. | 201 // seing the header. |
| 202 bool seen_header = false; | 202 bool seen_header = false; |
| 203 | 203 |
| 204 // Sometimes the listing doesn't end with a "Total" line, but | 204 // Sometimes the listing doesn't end with a "Total" line, but |
| 205 // it's only okay when it contains some errors (it's needed | 205 // it's only okay when it contains some errors (it's needed |
| 206 // to distinguish it from "ls -l" format). | 206 // to distinguish it from "ls -l" format). |
| 207 bool seen_error = false; | 207 bool seen_error = false; |
| 208 | 208 |
| 209 base::string16 total_of = base::ASCIIToUTF16("Total of "); |
| 209 for (size_t i = 0; i < lines.size(); i++) { | 210 for (size_t i = 0; i < lines.size(); i++) { |
| 210 if (lines[i].empty()) | 211 if (lines[i].empty()) |
| 211 continue; | 212 continue; |
| 212 | 213 |
| 213 if (StartsWith(lines[i], base::ASCIIToUTF16("Total of "), true)) { | 214 if (base::StartsWith(lines[i], total_of, base::CompareCase::SENSITIVE)) { |
| 214 // After the "total" line, all following lines must be empty. | 215 // After the "total" line, all following lines must be empty. |
| 215 for (size_t j = i + 1; j < lines.size(); j++) | 216 for (size_t j = i + 1; j < lines.size(); j++) |
| 216 if (!lines[j].empty()) | 217 if (!lines[j].empty()) |
| 217 return false; | 218 return false; |
| 218 | 219 |
| 219 return true; | 220 return true; |
| 220 } | 221 } |
| 221 | 222 |
| 222 if (!seen_header) { | 223 if (!seen_header) { |
| 223 seen_header = true; | 224 seen_header = true; |
| (...skipping 60 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 284 entries->push_back(entry); | 285 entries->push_back(entry); |
| 285 } | 286 } |
| 286 | 287 |
| 287 // The only place where we return true is after receiving the "Total" line, | 288 // The only place where we return true is after receiving the "Total" line, |
| 288 // that should be present in every VMS listing. Alternatively, if the listing | 289 // that should be present in every VMS listing. Alternatively, if the listing |
| 289 // contains error messages, it's OK not to have the "Total" line. | 290 // contains error messages, it's OK not to have the "Total" line. |
| 290 return seen_error; | 291 return seen_error; |
| 291 } | 292 } |
| 292 | 293 |
| 293 } // namespace net | 294 } // namespace net |
| OLD | NEW |