| Index: net/ftp/ftp_directory_listing_parser_os2.cc
|
| diff --git a/net/ftp/ftp_directory_listing_parser_windows.cc b/net/ftp/ftp_directory_listing_parser_os2.cc
|
| similarity index 80%
|
| copy from net/ftp/ftp_directory_listing_parser_windows.cc
|
| copy to net/ftp/ftp_directory_listing_parser_os2.cc
|
| index 2317fa3a6ccd228db29e7ab4029f83c805025717..47ceb2b14ece262a8ed0d95210d7586355936cb6 100644
|
| --- a/net/ftp/ftp_directory_listing_parser_windows.cc
|
| +++ b/net/ftp/ftp_directory_listing_parser_os2.cc
|
| @@ -2,7 +2,7 @@
|
| // Use of this source code is governed by a BSD-style license that can be
|
| // found in the LICENSE file.
|
|
|
| -#include "net/ftp/ftp_directory_listing_parser_windows.h"
|
| +#include "net/ftp/ftp_directory_listing_parser_os2.h"
|
|
|
| #include <vector>
|
|
|
| @@ -74,7 +74,7 @@ bool WindowsDateListingToTime(const std::vector<string16>& columns,
|
|
|
| namespace net {
|
|
|
| -bool ParseFtpDirectoryListingWindows(
|
| +bool ParseFtpDirectoryListingOS2(
|
| const std::vector<string16>& lines,
|
| std::vector<FtpDirectoryListingEntry>* entries) {
|
| for (size_t i = 0; i < lines.size(); i++) {
|
| @@ -86,31 +86,39 @@ bool ParseFtpDirectoryListingWindows(
|
|
|
| // Every line of the listing consists of the following:
|
| //
|
| - // 1. date
|
| - // 2. time
|
| - // 3. size in bytes (or "<DIR>" for directories)
|
| - // 4. filename (may be empty or contain spaces)
|
| + // 1. size in bytes (0 for directories)
|
| + // 2. type (A for files, DIR for directories)
|
| + // 3. date
|
| + // 4. time
|
| + // 5. filename (may be empty or contain spaces)
|
| //
|
| - // For now, make sure we have 1-3, and handle 4 later.
|
| - if (columns.size() < 3)
|
| + // For now, make sure we have 1-4, and handle 5 later.
|
| + if (columns.size() < 4)
|
| return false;
|
|
|
| FtpDirectoryListingEntry entry;
|
| - if (EqualsASCII(columns[2], "<DIR>")) {
|
| + if (!base::StringToInt64(columns[0], &entry.size))
|
| + return false;
|
| + if (EqualsASCII(columns[1], "DIR")) {
|
| + if (entry.size != 0)
|
| + return false;
|
| entry.type = FtpDirectoryListingEntry::DIRECTORY;
|
| entry.size = -1;
|
| - } else {
|
| + } else if (EqualsASCII(columns[1], "A")) {
|
| entry.type = FtpDirectoryListingEntry::FILE;
|
| - if (!base::StringToInt64(columns[2], &entry.size))
|
| - return false;
|
| if (entry.size < 0)
|
| return false;
|
| + } else {
|
| + return false;
|
| }
|
|
|
| - if (!WindowsDateListingToTime(columns, &entry.last_modified))
|
| + if (!FtpUtil::WindowsDateListingToTime(columns[2],
|
| + columns[3],
|
| + &entry.last_modified)) {
|
| return false;
|
| + }
|
|
|
| - entry.name = FtpUtil::GetStringPartAfterColumns(lines[i], 3);
|
| + entry.name = FtpUtil::GetStringPartAfterColumns(lines[i], 4);
|
| if (entry.name.empty()) {
|
| // Some FTP servers send listing entries with empty names.
|
| // It's not obvious how to display such an entry, so ignore them.
|
|
|